5

Следует ли иметь статический наблюдатель NSNotification (например, код ниже)? У меня проблемы, и я думаю, что это может быть связано с моей структурой класса singleton.Класс как наблюдатель NSNotification?

У меня не всегда есть экземпляр класса для прослушивания уведомлений, но статические свойства этого класса сохраняются для жизненного цикла моего приложения.

- (id)init { 
    [super init] 

    [[NSNotificationCenter defaultCenter] addObserver:[self class] 
              selector:@selector(action:aNotification:) 
               name:@"NSSomeNotification" 
               object:nil]; 
    return self; 
} 

+ (void)action:(NSNotification *)aNotification { 
    NSLog(@"Performing action"); 
} 

ответ

9

Первая проблема может быть ваш селектор —, который должен быть @selector(action:).

Кроме того, вы уверены, что хотите зарегистрировать уведомление в init (в котором отсутствует какой-либо звонок [super init], что может быть еще одной проблемой)? Это означает, что ваше уведомление будет (повторно) регистрироваться каждый раз, когда вы создаете экземпляр класса. Вы можете подумать о внедрении истинного одноэлементного объекта вместо методов класса.

+0

Это был селектор, спасибо. Я отредактировал свое сообщение, чтобы подумать, что я называю `[super init]` (я не опубликовал всю свою функцию). Кроме того, у меня есть чек, который гарантирует, что он не будет вызван несколько раз, так что это тоже не проблема. У вас есть ссылка, которая покажет, как создать «настоящий синглтон» в Objective-C? – Dov 2010-12-08 11:35:48