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