我希望有人可以帮助解决我的通知问题。我有一个通知,看起来设置正确,但没有按预期交付。我正在开发基于文档的应用程序。委托/文档类在从保存的文件中读取时发布通知:
[[NSNotificationCenter defaultCenter] postNotificationName:notifyBsplinePolyOpened object:self];
记录告诉我每当我打开保存的文档时都会到达此行。
在DrawView类中,我有windowOpen通知的观察者和bsplinePoly文件打开通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mainWindowOpen:)
name:NSWindowDidBecomeMainNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(savedBspline:)
name:notifyBsplinePolyOpened
object:nil];
- (void) mainWindowOpen:(NSNotification*) note
{
NSLog(@"Window opened");
_mainWindow = [note object];
}
- (void) savedBspline:(NSNotification*) note
{
NSLog(@"savedBspline called");
NSLog(@"note is %@", [note name]);
}
行为很奇怪。当我保存并关闭主窗口并重新打开它时,我得到“Window opened”消息,但没有“savedBspline called”消息。如果我打开一个主窗口并打开以前保存的会话,我会收到“Window opened”消息和“savedBspline called”消息。
我搜索了在线讨论和Apple DevCenter文档,但我没有看到这个问题。
答案 0 :(得分:1)
NSNotification
投放按预期工作(at least when no NSNotificationQueue
's are involved)。它们是立即交付的,而不是其他线程,没有延迟,也没有过滤。
我会说,当通知触发时你的某些对象尚未实例化,或者你以某种其他方式混淆了执行顺序:你说你在从已保存的文件中读取时发布通知但是你'在保存和关闭窗口时重新丢失通知。
为了帮助调试,我建议您在app appate中设置一个通知观察器,它只记录所有通知。您确定所有通知都按预期交付。