Objective-C - Сообщение контроллера представления от делегата приложения - PullRequest
2 голосов
/ 03 октября 2011

Я хочу загрузить некоторые данные в делегат приложения в - application:didFinishLaunchingWithOptions:

После того, как я скачал некоторые данные, я хочу установить эти данные для свойства NSArray в контроллере представления. Если у меня есть синтезированное свойство NSArray (nonatomic, retain) с именем data, я бы хотел сделать [viewController setData:downloadedData];

Как бы я вызвал активный экземпляр viewController из делегата приложения?

Моя структура приложения представляет собой контроллер панели вкладок в качестве корневого контроллера.

Ответы [ 2 ]

2 голосов
/ 03 октября 2011

Вы захотите использовать NSNotificationCenter, который по существу будет передавать сообщение всем объектам, которые подписались на это конкретное сообщение.

По вашему мнению контроллер подписывается на уведомление:

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(downloadedData:) 
    notificationName:@"DownloadedData" 
    object:data];

- downloadedData:(NSNotification *)notification {
    self.data = notification.object;
}

А в вашем приложении делегат отправляет подписчикам уведомление:

[[NSNotificationCenter defaultCenter] 
    postNotificationName:@"DownloadedData" 
    object:data];
1 голос
/ 03 октября 2011

Добавьте свойство делегатаComplete в класс делегата приложения:

//define ivar
id delegateComplete;

//define property
@property (nonatomic, retain) id delegateComplete;

//synthesize
@synthesize delegateComplete;

В методе init или viewDidLoad вашего viewController сделайте следующее:

MainClass *appDelegate = (MainClass *)[[UIApplication sharedApplication] delegate];
appDelegate.delegateComplete = self;

замените MainClass классом вашего приложения. После завершения загрузки выполните следующие действия в делегате приложения:

[delegateComplete loadingCompletedWithData:data];

Не забудьте добавить этот метод в свой viewController:

- (void)loadingCompletedWithData:(NSData *)data

Что происходит, так это то, что ваш контроллер представления регистрируется в вашем делегате приложения. Когда загрузка завершается, если ваш контроллер представления зарегистрирован, вызовите loadingCompletedWithData. Правильный способ сделать это будет через протокол.

...