我有一个名为MyButton
的NSButton自定义类,我在其中发布了快速保存的通知
MyButton.m
:
-(void)mouseDown:(id)sender{
[super mouseDown:sender];
[super mouseUp:sender];
[[NSNotificationCenter defaultCenter] postNotificationName:@"quickSave" object:nil userInfo:nil];
}
在AppDelegate
中我收到快速保存的通知:
AppDelegate.m
:
- (IBAction)saveAction:(id)sender{
NSLog(@"Saving...");
NSError *error = nil;
if (![[self managedObjectContext] commitEditing]) {
NSLog(@"%@:%@ unable to commit editing before saving", [self class], NSStringFromSelector(_cmd));
}
if (![[self managedObjectContext] save:&error]) {
[[NSApplication sharedApplication] presentError:error];
}
}
-(void)awakeFromNib{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveAction:) name:@"quickSave" object:nil];
}
通过NSLog "Saving..."
我看到saveAction被调用了2次。为什么呢?
PS:通知我在selector:
字段中插入的每个函数调用2次,所以也许它与-(void)awakeFromNib{...}
有关,因为我看到它被调用了两次(里面有两个不同的自我awakeFromNib)。
更新:我已经“解决”Interface Builder中的问题绑定,App作为AppDelegate委托,然后在[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveAction:) name:@"quickSave" object:nil];
内添加-(void)applicationDidFinishLaunching:(NSNotification *)aNotification{...}
。我不知道它是否是一个真正的解决方案,显然它不是我的问题的答案(为什么awakeFromNib被调用2次),但它可能对某人有用。有没有人有线索?
UPDATE2:正确的managedobjectcontext是第二次在awakeFromNib
中调用的那个,第一个(awakeFromNib
和applicationDidFinishLaunching
中相同)是错误的。
我的应用程序是状态栏应用程序,第一个awakeFromNib在我启动应用程序时调用,第二个在打开首选项窗口时调用。
答案 0 :(得分:0)
日志消息指示AppDelegate的两个不同实例接收单个通知。可能你曾两次实例化AppDelegate。确保您没有手动执行[[AppDelegate alloc] init]
或其他操作,也没有在NIB中放置多个AppDelegate对象。