Objective-C - 从应用程序委托发送视图控制器

时间:2011-10-03 13:52:32

标签: objective-c cocoa-touch uiapplicationdelegate

我想在- application:didFinishLaunchingWithOptions:

中的应用程序委托中下载一些数据

我下载了一些数据后,我想将这些数据设置为视图控制器中的NSArray属性。如果我有一个名为data的NSArray(非原子,保留)的合成属性,我想做[viewController setData:downloadedData];

如何从应用程序委托中调用活动的viewController实例?

我的应用程序结构是一个标签栏控制器作为根控制器。

2 个答案:

答案 0 :(得分:2)

您需要使用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 :(得分:1)

在app delegate class中添加delegateComplete属性:

//define ivar
id delegateComplete;

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

//synthesize
@synthesize delegateComplete;

在viewController的init方法或viewDidLoad中执行以下操作:

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

将您的应用类替换为MainClass。下载完成后,请在您的应用代理中执行以下操作:

[delegateComplete loadingCompletedWithData:data];

不要忘记在viewController中添加此方法:

- (void)loadingCompletedWithData:(NSData *)data

您的视图控制器会向您的应用委托注册。加载完成后,如果您的视图控制器已注册,请调用loadingCompletedWithData。这样做的正确方法是通过协议。