5

Я хотел бы зарегистрировать любые NSNotifications, отправленные одним NSNotificationCenter, совместно используемым в моем приложении. Я попытался подклассифицировать NSNotificationCenter с намерением добавить код регистрации в три метода post, но он возвращает экземпляр центра CFNotification вместо моего подкласса.Ведение журнала NSNotifications

Несомненно, существует способ мониторинга публикации NSNotification?

EDIT/UPDATE

Как два ответа ниже правильно указать, что я мог слушать все уведомления и зарегистрировать их в обработчике, но последовательность обработчик будет получать эти уведомления далеко не гарантировано, чтобы быть таким же, как последовательность, в которой они были отправлены. Если бы я мог быть уверен, что обработчик всегда будет первым, кто будет уведомлен об этом, это будет работать, но я не могу: «Порядок, в котором наблюдатели получают уведомления, не определен» От NSNotification Docs

ответ

9

Используя - addObserver:selector:name:object: и пройдите nil как для name, так и для object, вы получите уведомление о любом уведомлении.

- (id)init 
{ 
    self = [super init]; 
    if (self != nil) 
    { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(log:) name:nil object:nil]; 
    } 
    return self; 
} 

- (void)log:(NSNotification *)notification 
{ 
    NSLog(@"%@", notification); 
} 

Edit: если вы хотите, чтобы получить реальный порядок уведомления быть отправки, попробуйте подклассов NSNotificationCenter и опрокинув следующие методы:

– postNotification: 
– postNotificationName:object: 
– postNotificationName:object:userInfo: 

Если подклассов нет возможности для вы можете рассмотреть определение категории на NSNotificationCenter, где вы переопределяете эти методы с вызовом супер-реализации. (вам нужно будет использовать swizzle методы для вызова супер в пределах категории). Скажите, если вам нужна помощь.

+0

Спасибо. Но проблема в том, что я не могу зарегистрировать предварительную отправку. Я оставлен для регистрации уведомлений после того, как они отправляются в качестве наблюдателя в произвольной позиции в последовательности уведомлений наблюдателей. Если я могу войти в пункт отправки, я получаю гораздо более четкое представление о последовательности уведомлений. Этот глобальный слушатель не может быть уведомлен, пока предыдущий обработчик не вызвал бы последовательность событий, то есть я не смог бы увидеть порядок отправки, только тот заказ, который получил этот конкретный наблюдатель. – Undistraction

+0

Отметьте мои изменения;) –

+0

Спасибо. Проблема заключается в том, что при выделении/инициализации NSNotificationCenter вы не получите центр NSNotification. Вы получаете центр CFNotificationCenter. То же самое относится к подклассу NSNotificationCenter. Неужели добавление категории в NSNotificationCenter не поможет? – Undistraction

0

Вы должны иметь возможность использовать [addObserver: self selector: @selector (любое имя :): nil object: nil] и просто введите свой код ведения журнала в любой метод:. Этот наблюдатель должен получать все уведомления, отправленные вашим приложением (по крайней мере, все те, что размещены центром по умолчанию).