我一直试图弄清楚这一整天,我开始变得绝望了...... 所以这是我的问题:
我有一个表视图控制器,显示文件列表。用户可以将新文件下载到此列表中。我在一个单独的类中异步处理下载。当下载新文件时,我想通知表视图控制器,因此它可以更新列表。委托模式不适合这里,因为必须通知多个实例,所以我想使用NSNotificationCenter。
在视图控制器的viewDidAppear:方法中,我注册为观察者:
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(downloadComplete:)
name:kDownloadCompleteNotification
object:nil];
在发布通知之前肯定会调用此方法,因为用户必须点击视图控制器上的“添加”按钮才能开始新的下载。下载完成后,我发布通知(在DownloadManager类中):
[[NSNotificationCenter defaultCenter]
postNotificationName:kDownloadCompleteNotification
object:self];
但是,从不调用视图控制器中的通知处理程序方法。我添加了断点,但它没有被调用。我也尝试将对象设置为nil。没有区别。
- (void)downloadComplete:(NSNotification *)notification {
NSLog(@"Inserting new files into table view.");
}
注册和发布通知都是在主线程上完成的(我认为无论如何都不重要)。视图控制器未发布或任何内容。据我所知,我没有做任何拼写错误。名称字符串是相同的常量。
如果在注册为观察者时将name参数设置为nil,我会收到所有类型的(系统)通知,但不会收到我自己的通知。但是,如果我在注册后立即发布测试通知(在viewDidAppear中)它可以正常工作。
我不知道还应该检查什么......任何提示都非常感激。谢谢!