Использование контроллера вкладок по умолчанию, созданного контроллером первого представления проекта, не отвечает на addsubview

Я создал проект, используя проект контроллера вкладок по умолчанию. Я использую построитель интерфейса для редактирования файла .xib и добавления изображений и кнопок. Я подключаю их к объекту FirstViewController в построителе интерфейса (который я создал и установил его класс таким же, как файл кода). Я подключил все, используя IBoutlets и IBActions.

Все работало нормально, но затем я внес некоторые изменения в конструктор интерфейса (добавил UILabel), и теперь метод, который запускается при нажатии (я прогнал его с помощью отладчика), имеет строку, которая добавляет подпредставление в контроллер представления, и он действует так, как будто он не был выполнен. Метод (и код выполняется) выполняется без ошибок (согласно отладчику), но представление просто не добавляется. Это произошло после того, как я внес некоторые изменения через конструктор интерфейса.

Теперь, если я подключу свою кнопку к «Выбранному первому контроллеру просмотра», щелкнув соответствующую вкладку и перетащив IBOutlet на UILabel, эта метка теперь будет иметь несколько выходов ссылок. Теперь, если я сделаю то же самое для кнопки, метод (IBAction) будет выполнен дважды, но на самом деле подпредставление будет добавлено и отображено. Но я получаю ошибку доступа к памяти, потому что мой метод IBAction (кнопка) обращается к свойству, которое что-то хранит. Я предполагаю, что это как-то связано с созданием памяти в контроллере первого представления, но пытается получить к ней доступ в выбранном контроллере первого представления? Если в этом есть смысл?

Я понятия не имею, почему это происходит и почему просто кнопка перестала работать. Я попытался объяснить эту проблему как можно лучше, это немного сбивает с толку. Но если у кого-то есть какие-либо советы или идеи, я хотел бы услышать, что вы, ребята, думаете об этой проблеме и о том, как ее решить.


person rksprst    schedule 08.11.2008    source источник


Ответы (2)


Вы уверены, что первая розетка на самом деле подключена? Если вы назовете выход таким образом, что он конфликтует с каким-то другим свойством, установленным во время загрузки пера (через initWithCoder :), это может привести к тому, что вещи не будут подключены должным образом. Вы можете проверить это, выполнив NSLog'ирование значения выходов в файле awakeFromNib.

person Louis Gerbarg    schedule 08.11.2008

Это также звучит — и не стесняйтесь поправлять меня, если я ошибаюсь — что вы прикрепляете действия в представлении, загружаемом панелью вкладок, к контроллеру панели вкладок. Эти два объекта совершенно разные, и на любые данные, к которым вы хотите получить доступ из представления, следует ссылаться из контроллера представления, а не из контроллера панели вкладок (который должен выполнять довольно легкую работу по загрузке и выгрузке других ваших контроллеров представления). Точно так же вы не должны добавлять подпредставление в контроллер представления, он понятия не имеет, что делать с подпредставлением - вы должны использовать контроллер представления, чтобы добавить подпредставление в свое представление. Хотя кажется, что это вопрос семантики, контроллер представления принципиально отличается от представления. У первого есть задача управлять содержимым и поведением представления и реагировать на действия представления, где это необходимо, в то время как второе является просто механизмом для отображения вещей на экране.

person wisequark    schedule 08.11.2008