Я придумал хак для борьбы с этим. Нет уведомления о том, что сигнализирует о том, что окно было выведено на экран, но есть уведомление, которое гарантированно будет отправлено при выводе окна на экран. Я говорю о NSWindowDidUpdateNotification
, что означает, что окно обновилось само по себе.
Конечно, это не только отправляется, когда окно появляется - оно отправляется каждый раз, когда окно обновляется. Излишне говорить, что это уведомление отправляется лот более одного раза. Таким образом, вы хотите следить за ним в первый раз, делать свое дело и игнорировать любые последующие уведомления. В моем случае я хотел добавить лист к окну, который позже будет заказан другой частью моего приложения. Поэтому я сделал что-то вроде этого:
__block id observer = [NSNotificationCenter.defaultCenter addObserverForName:NSWindowDidUpdateNotification object:window queue:nil usingBlock:^(NSNotification *note) {
[self showSetupSheet];
[NSNotificationCenter.defaultCenter removeObserver:observer];
}];
Нет особой причины, по которой вам нужно было бы использовать наблюдателя на основе блоков - наблюдатель на основе методов будет работать так же хорошо.