Ищите хорошие рекомендации по управлению кодом для больших классов UIViewController - PullRequest
1 голос
/ 12 января 2012

Я работал над своим первым проектом XCode / iOS, и до сих пор это был приятный опыт. В настоящее время я работаю над файлом Nib, который служит основным дисплеем для других представлений. В этом Nib-файле у меня есть основной UIView, а рядом я создаю серию из семи других представлений. Во время выполнения я заменяю эти семь представлений, когда это необходимо, внутри контейнера UIVie, расположенного на моем основном UIView.

Во всех моих 8 видах, которые я проектирую в IB, у меня есть большое количество кнопок, изображений и других объектов, которые необходимо связать с IBOutlets. Поскольку этот проект расширяется, было бы полезно разделить мой класс на несколько файлов кода.

Использование категорий - это решение, однако я столкнулся с раздражением - когда я пытался создать IBOutlet в одном из моих заголовков категорий, компилятор XCode продолжает выдавать мне ошибки и предупреждения о ivars и outlets. В моем Nib у меня есть большое количество объектов, которым нужны розетки, и я бы предпочел не определять их все в одном огромном файле кода, если это возможно.

Однако я понимаю, что должен работать в рамках своих ограничений, поэтому мой вопрос немного отличается от вопроса о том, как добавить IBOutlet в категорию. Вместо этого я хотел бы знать, каковы лучшие методы разделения большого класса UIViewController на несколько файлов кода? Каковы ограничения target-c и каков наилучший способ структурировать ваш код при работе с дизайном интерфейса?

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

Любые указатели были бы полезны. Спасибо!

Ответы [ 2 ]

2 голосов
/ 12 января 2012

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

Для этого определите контроллеры в отдельных классах с соответствующими IBOutlets, а затем перетащите объект NSObject из панели объектов (где находятся UILabel, UIButton и т. Д.) В IB. Затем для каждого объекта определите его класс для правильного контроллера, и у вас будет доступ ко всем правильным выходам и действиям. Затем вы можете подключить контроллеры к одному UIViewController, чтобы контролировать, как они взаимодействуют друг с другом.

Однако предпочтительным способом было бы использование отдельных NIb для отдельных контроллеров и их всех в качестве подклассов UIViewController. Если вы перейдете на iOS5, они заменили NIB в IB с раскадровками. Это позволяет вам иметь отдельные UIViewControllers в одном файле IB, однако они более эффективны в использовании памяти, поскольку не сохраняют в памяти все дерево объектов.

1 голос
/ 12 января 2012

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

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

...