дополнительный NIB для просмотра контроллера в приложении с вкладками - PullRequest
0 голосов
/ 22 декабря 2011

{Xcode 4.2, цель развертывания iOS4.3, а не раскадровка, использующая ARC}

Я начал с шаблона приложения с вкладками и выбрал универсальную платформу, которая позволяет мне просматривать классы контроллера и файлы NIB дляiPhone ( ClassName_iPhone.xib ) и iPad ( ClassName_iPad.xib ) для 2 вкладок с оператором if в AppDelegate, чтобы определить, какие из них запускать - именно так, как я хотел, чтобы он был настроен.

Я хотел добавить 3-ю и 4-ю вкладки, поэтому, начиная с 3-й вкладки (делая по 1 за раз), я создал новый подкласс UIViewController.Поскольку он не дает возможности создавать оба NIB одновременно, я выбрал «Targeted for iPad» и намеревался создать NIB iPhone вручную.Я добавил суффикс "_iPad" к созданному файлу NIB, затем я создал файл NIB представления пользовательского интерфейса, к которому я добавил суффикс "_iPhone".Затем я настроил код для нового контроллера представления в файле реализации AppDelegate, включив в него 3-й контроллер представления и вкладку, и я использовал другие классы контроллера представления в качестве руководства для настройки кода нового класса.

Для третьего _iPhone NIB я перетащил объект просмотра из библиотеки объектов на холст и настроил его в соответствии с другими 2 _iPhone NIB.Но когда я пошел соединять розетки, в ссылочных розетках панели соединений, к которым можно подключиться, нет розетки для просмотра, что, как я думал, должно быть.На данный момент я подозревал, что что-то не так.

enter image description here

Я попытался запустить его в симуляторе, в режиме iPad он работает нормально (все 3 вкладки активны).Но в режиме iPhone нажатие на 3-ю вкладку приводит к сбою «SIGABRT» в потоке 1. Очевидно, что я не работал.Я не вижу ничего в окне вывода, которое дает мне какие-либо подсказки.

Будучи новичком в obj-c, поэтому, не будучи слишком уверенным в проблеме, я бы подумал, что тоже:

  • использовал неправильный шаблон интерфейса пользователя (представление)
  • должен был использовать объект контроллера представления из библиотеки объектов (не представление)
  • или что я должен был объявитьнекоторые выходы в моих файлах классов контроллера представления.

Но если бы мне следовало сделать любой из последних 2, то мой вопрос был бы, почему тогда работает iPad NIB, когда у него явно есть объект представленияв NIB & нет выходов, объявленных в файлах класса (то же самое с двумя другими контроллерами представления для обоих устройств)?

Есть ли в классе UITabView выходы, предварительно объявленные в нем для первых двух вкладок?Но это все еще не объясняет, почему работает _iPad NIB.

Как обычно, любая помощь и совет очень ценятся, и если есть ссылка на объяснение, которое я пропустил, пожалуйста, покажите мне, потому что яЯ счастлив провести исследование.

Если то, что я сделал здесь, не поддается определению, то, в конечном итоге, я думаю, что в итоге я спрашиваю, как понять, как лучше всего создать второй файл NIB для iPhone, чтобысетка с классом, созданным с помощью iPad NIB.

1 Ответ

0 голосов
/ 23 декабря 2011

Извините, что отвечаю на мой собственный вопрос, но при дальнейшем поиске я нашел этот ответ, который был решением, хотя и не совсем всей историей.Поэтому я решил поместить то, что сделал, в ответ, чтобы другие могли ссылаться на него.

enter image description here

Как объясняет Петр Чапла в связанном ответе, по какой-то причине Xcode не заполняетсяданные connectionRecords, как вы можете видеть по моей первой красной стрелке.Посмотрите на контроллер представления, который работает (где вторая красная стрелка), вот как должны выглядеть данные.Поэтому ответ состоит в том, чтобы вырезать данные и вставить их в файл NIB или ввести его.Вы можете сделать это в Xcode, щелкнув правой кнопкой мыши по файлу NIB в навигаторе проекта и затем Открыть как> Исходный код, что вы видите на моих снимках экрана.хотя ссылка на место назначения, на которую указывает вторая красная стрелка, может быть неправильной для файла NIB, который вы вставляете (мой не был), а Xcode может не позволить вам вернуться в режим IB.Если это так, вам нужно получить правильную ссылку из класса IBUIView в вашем файле NIB, на что указывает третья красная стрелка.После того, как я скопировал эту ссылку в свою целевую ссылку ref =, как показано четвертой красной стрелкой, все было в порядке, и проблема была решена.Затем я могу вернуться в режим IB (щелкните правой кнопкой мыши, откройте As> Interface Builder - iOS), и представление будет работать в симуляторе.

...