Для метода mainWindow в документах написано :
Этот метод может вернуть nil, если nib-файл приложения не завершил загрузку, если получатель не активен или приложение скрыто.
Я только что создал быстрое тестовое приложение и поместил следующий код:
NSLog(@"%@", [[NSApplication sharedApplication] mainWindow]);
в мой метод applicationDidFinishLaunching:aNotification
и метод действия, который я подключил к кнопке в главном окне моего приложения.
При запуске mainWindow
был равен нулю, но когда я нажимал кнопку (после того, как все было запущено, работало и отображалось), mainWindow
больше не было равно нулю.
NSApplication
предоставляет другие методы, которые могут быть вам полезны:
- windows
- массив всех окон;
– keyWindow
- дает окно, которое получает ввод с клавиатуры (или ноль);
– windowWithWindowNumber:
- возвращает окно, соответствующее номеру окна - если вы знаете номер окна, содержимое которого вы хотите заменить, вы можете использовать это;
– makeWindowsPerform:inOrder:
- отправляет сообщение в каждое окно - вы можете использовать его для проверки каждого окна на предмет его заинтересованности.
Что касается вызова методов на delegate
, то, что вы говорите, выдает предупреждение, прекрасно работает для меня. Например, это работает без предупреждений:
NSLog(@"%@", [[[NSApplication sharedApplication]delegate] description]);
Какое именно предупреждение вы получаете? Вы пытаетесь вызвать метод, который не существует?