2013-07-08 3 views
1

Я создал чрезвычайно простую тестовую программу. Он имеет одну кнопку. Нажатие кнопки вызывает NSPopover с меткой. Эта метка находится в отдельном файле xib со своим собственным NSViewController.Как правильно настроить NSPopover с отдельным viewController

Цель, когда на главном экране, когда я нажимаю кнопку, popover покажет xib-файл viewcontroller. И на ярлыке xib-файла должен быть установлен текст «Он работает».

Хорошо .. Это работает, но только на после вторая погрузка popover. При первом нажатии кнопки метка по-прежнему имеет старое значение по умолчанию. Но со второго щелчка и далее «Это работает». Есть ли у кого-нибудь идеи, что может вызвать эту проблему? Его всего лишь около 5 строк кода код можно увидеть на этом хранилище ->https://github.com/patchthecode/testtest

ответ

1

Вызов [mainScreenPopoverViewController view]; в - (void)windowDidLoad метод. Это загрузит ваше представление в память.

До вызова [mainScreenPopoverViewController view]; (текстовое поле адрес 0x0)

enter image description here

Вы не должны использовать сильные свойства для всех IBOutlet.

@property (nonatomic, strong) IBOutlet NSTextField *textField; 

Посмотрите на Resource Programming Guide

С практической точки зрения, в IOS и OS X точек должны быть определены как заявленных свойств. Выходы обычно должны быть слабыми, , за исключением файлов от владельца файла, до объектов верхнего уровня в файле nib (или в iOS, сцену раскадровки), который должен быть сильным. Розетки, которые вам создать поэтому обычно должно быть слабыми, потому что:

  • Outlets, которые вы создаете для подвидов вида в контроллере представления или окна контроллера оконных, например, произвольные ссылки между объектами, которые не делают подразумевают право собственности.

  • Сильные выходы часто определяются каркасных классов (например, на выходе вид UIViewController, либо NSWindowController аутлет окно ).

+0

Привет, хорошо я знаю о сильных/слабых IBoutlets. Моя ошибка. Я просто сделал это тестовое приложение, чтобы показать поп-код. Одно дело, решение работает, но есть ли какая-то связь с объяснением, почему это так? У меня было убеждение, что код загрузки nib уже создает объекты в памяти. –

+0

Используйте точку останова un IBAction и проверьте адрес текстового поля. –

+0

Как я установил точку останова, я понимаю, что происходит сейчас. Благодарю. –

Смежные вопросы