Наследовать от 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 за ваш комментарий!

Другие вопросы по тегам