Наследовать от NSNotification
Я хочу создать подкласс NSNotification
, Я не хочу создавать категорию или что-то еще.
Как ты можешь знать NSNotification
это кластер классов, как NSArray
или же NSString
,
Я знаю, что подкласс класса кластера должен:
- Объявить свое собственное хранилище
- Переопределить все методы инициализатора суперкласса
- Переопределить примитивные методы суперкласса (описано ниже)
Это мой подкласс (ничего особенного):
@interface MYNotification : NSNotification
@end
@implementation MYNotification
- (NSString *)name { return nil; }
- (id)object { return nil; }
- (NSDictionary *)userInfo { return nil; }
- (instancetype)initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo
{
return self = [super initWithName:name object:object userInfo:userInfo];
}
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
return self = [super initWithCoder:aDecoder];
}
@end
Когда я использую это, я получаю экстраординарное:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** initialization method -initWithName:object:userInfo: cannot be sent to an abstract object of class MYNotification: Create a concrete instance!'
Что еще я должен сделать, чтобы унаследовать от NSNotification
?
1 ответ
Проблема была в том, что я пытался вызвать инициализатор суперкласса. Вы не можете сделать это, потому что это абстрактный класс. Итак, в инициализаторе вы просто должны инициировать ваше хранилище.
Потому что это ужасно, в итоге я создаю категорию для NSNotification
вместо. Там я добавил три добрых метода:
- Статический конструктор для моего пользовательского уведомления: здесь я настраиваю
userInfo
использоваться в качестве хранилища. - Способ добавления информации в хранилище: обозреватель уведомлений вызовет это для обновления
userInfo
, - Метод обработки информации, представленной наблюдателями: после завершения метода отправки в уведомлении собрана вся необходимая информация. Мы просто должны обработать его и вернуть. Это необязательно, если вы не заинтересованы в сборе данных.
В конце концов, категория, с которой это просто помощник userInfo
,
Спасибо Paulw11 за ваш комментарий!