У меня есть пользовательский класс для NSButton называется MyButton
, где я отправляю уведомление на Quicksave MyButton.m
:какао: saveAction называется 2 раза с уведомлением
-(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 раза. Зачем?
P.S: уведомление требует 2 раза каждую функцию вставить в selector:
поле, так что, возможно, это связано с -(void)awakeFromNib{...}
, потому что я вижу, что он дважды называется (есть две разные самоуправления внутри awakeFromNib).
ОБНОВЛЕНИЕ: Я «решил» проблему привязки к интерфейсу Builder для приложения как делегата AppDelegate, а затем добавляет [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveAction:) name:@"quickSave" object:nil];
внутри -(void)applicationDidFinishLaunching:(NSNotification *)aNotification{...}
. Я не знаю, является ли это реальным решением, и, очевидно, это не ответ на мой вопрос (почему awakeFromNib вызывается 2 раза), но это может быть полезно кому-то. У кого-нибудь есть ключ?
UPDATE2: право managedobjectcontext это одна называется в awakeFromNib
во второй раз, первый (идентичен awakeFromNib
и applicationDidFinishLaunching
) является неправильным. Мое приложение - это приложение состояния, первый awakeFromNib вызывается, когда я запускаю приложение, а второй, когда открывается окно предпочтений.
это бревно с отправителем и я: 'Сохранение ... отправителя: NSConcreteNotification 0x101915b70 {имя = Quicksave} самостоятельно: Saving ... отправитель: NSConcreteNotification 0x101915b70 {имя = Quicksave } self: ' есть два разных авто, я также пытался сделать' removeObserver' прямо перед 'addObserver', но это бесполезно. –