从AppDelegate的线程中跨多个视图控制器触发事件

3
我有一个NSAutoreleasePool线程,旨在从Web服务中获取信息。我已经成功编写了Web服务代码,并且可以在视图控制器中轻松触发线程,实际上它非常好用。
我想要:
  • 将线程实例化移动到appDelegate-很容易!
  • 定期运行它,并以某种方式告诉其下面的视图控制器(5-10),如果下载了新信息
  • 具有在计划程序之外手动执行线程的能力
我可以使用performSelectorOnMainThread在appdelegate上启动一个方法,但我如何让我的子视图控制器“订阅”appdelegate上的方法呢?
3个回答

3

以下是您需要做的:

从发送消息的类中,像这样发布通知:

[[NSNotificationCenter defaultCenter] postNotificationName: @"YOUR_NOTIFICATION_NAME" object: anyobjectyouwanttosendalong(can be nil)];

在你想要收到通知的视图控制器中:
在viewDidLoad中执行以下操作:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(METHOD_YOU_WANT_TO_INVOKE_ON_NOTIFICATION_RECEIVED) name:@"YOUR_NOTIFICATION_NAME" object:sameasbefore/nil];

重要提示!不要忘记在viewDidUnload()中执行以下操作:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"YOUR_NOTIFICATION_NAME" object:sameasbefore/nil];

我对与通知相关的对象不是很确定,但你可以在这里查找

注意:如果只有一个对象通知另一个对象,最好使用协议:) 但在此情况下因为有多个视图控制器在监听,所以使用通知。


没关系,只要你的问题解决了 :) 祝你好运! - Sid

3
使用NSNotificationCenter,您可以发布通知。这样,其他类可以“订阅”它们需要的通知,而不必让appDelegate知道其他类。
另外,我建议保持线程活动状态,每次生成新线程都很耗费资源,当然,只有在经常生成新线程时才会这样。我建议使用GCD(iOS 4+)。

太棒了,我会玩得很开心 :) 我之前是PocketPC开发者,所以有点落后哈哈 - Adam Purdie

1
使用NSNotificationCenter发送事件,以便您的视图控制器可以观察到它们?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接