我想在- application:didFinishLaunchingWithOptions:
我下载了一些数据后,我想将这些数据设置为视图控制器中的NSArray
属性。如果我有一个名为data
的NSArray(非原子,保留)的合成属性,我想做[viewController setData:downloadedData];
如何从应用程序委托中调用活动的viewController实例?
我的应用程序结构是一个标签栏控制器作为根控制器。
答案 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。这样做的正确方法是通过协议。