2013-09-25 3 views
2

Я использую класс NSNotificationCenter для трансляции, когда модель моего приложения изменяется так, что может заинтересовать другой класс. Я следую стандартной практике, примерно так:Как регистрировать уведомления NSNotificationCenter в файле заголовка

NSNumber *myData = [NSNumber numberWithInt:42]; 
NSDictionary *myDict = 
      [NSDictionary dictionaryWithObject:myData 
             forKey:@"data"]; 

NSString *myNotificationKey = @"mynote"; 
[[NSNotificationCenter defaultCenter] postNotificationName:myNotificationKey 
                object:self 
                userInfo:myDict]; 

Ничего нового. Вот мой вопрос: как мне «объявить» уведомления, которые я могу опубликовать, чтобы другие разработчики знали, что слушать? Я не имею в виду буквально заявить, но как мне сообщить, чего ожидать, помимо написания отдельной документации? Я хочу, чтобы кто-то, используя мой класс, мог посмотреть заголовочный файл и определить, какие уведомления они могут ожидать. Я мог бы сделать что-то вроде этого ...

// in MyClass.h 

/* 
* NOTIFICATIONS 
* Name: mynote 
* UserInfo: {data : (NSNumber *)} 
* Name: myothernote 
* etc.... 
*/ 

Но это довольно неуклюже. Единственная возможность разместить такую ​​информацию в отдельной документации?

+2

Сторона примечания - используйте новый синтаксис Objective-C: 'NSDictionary * myDict = {@" data ": @ 42};'. – rmaddy

+1

Спасибо! Только одна сторона-примечание: я считаю, что вы опустили ведущий '@'; должен быть 'NSDictionary * myDict = @ {@" data ": @ 42};'. – ravron

+0

Да, я это сделал. Сожалею. Хороший улов. – rmaddy

ответ

2

Вот что я использую:

в заголовочном файле, после #import строк, но перед @interface декларации:

// Documentation about why the notification is interesting and useful 
    extern NSString * const ZZZSomeNameNotification; 

в файле реализации:

NSString * const ZZZSomeNotification = @"ZZZSomeNotification"; 

Затем при отправке уведомления в вашем коде, используйте ZZZSomeNotification всякий раз, когда ссылаетесь на это имя.

Это довольно похоже на то, как Apple объявляет имена уведомлений в своих заголовочных файлах. Взгляните на заголовочный файл для класса Apple, который вы используете, через пункт меню «Открыть быстро ...» в меню «Файл», и вы увидите что-то подобное.

+0

Я не очень счастлив, что это окончательное решение, но, похоже, лучшее, что я собираюсь получить. – ravron

Смежные вопросы