Вы можете создать пользовательский класс-потомок XIB и UIViewController, как и любой другой вид, и повторно использовать его в виде прокрутки.Это избавляет вас от разметки подпредставлений вручную и позволяет инкапсулировать любую логику вокруг строк форматирования для отображения.Используя этот подход, пользовательский вид карты заметок будет работать автономно или как подпредставление в чем-то другом (например, в виде прокрутки) и обеспечивать согласованный интерфейс для пользователя.
Вы можете подключить розетки в View к любому объекту, который вам нужен - если это не производный класс UIViewController, его можно назвать в XIB как прокси-объект.Вы устанавливаете класс прокси на свой пользовательский класс и подключаете розетки как обычно.Однако при создании представления это становится немного странным, так как вам нужно передать экземпляр этого пользовательского класса (Proxy, который вы определили в XIB) методу NSBundle loadNibNamed в словаре опций.Это работает, но я обычно использую ранее упомянутое решение, поскольку оно позволяет представлению работать правильно независимо без какого-либо дополнительного кода.
В обоих решениях у меня есть назначенный инициализатор для представления, которое принимает сущность какпараметр, позволяющий настроить представление, а также свойство, которое можно использовать для изменения сущности после визуализации представления (установщик для свойства вызывает обновление и анимацию представления при его изменении)
В любом случае, в текущем SDK (<5) подпредставления не будут участвовать в обычном жизненном цикле представления (viewDidLoad, viewDidUnload и т. Д.).Только основные контроллеры представления (отображаемые с использованием push / popViewController, presentModalViewController) имеют эти методы, вызываемые, поэтому, если у ваших подпредставлений есть код, который выполняется в одном из этих методов жизненного цикла (и они, вероятно, будут), вам придется создать свой собственный.слесарное дело, чтобы уведомить подпредставления о том, что происходит.Поскольку SDK 5 все еще находится под NDA, я не могу сказать, что там отличается, но я <em>могу сказать, что если ваше приложение может ждать 5, ваша жизнь будет намного проще.Посмотрите, что нового в 5, и вы поймете, о чем я говорю.
Что касается загрузки данных, трудно рекомендовать лучший метод, не зная больше о том, как загружается ваше приложение.информация, сколько записей отображается за один раз и т. д. В общем, вы должны делать как можно меньше запросов на выборку, не загружая больше данных, чем будет отображаться немедленно.В моих проектах я обычно:
- Создаю один FetchRequest за "просмотр"
- Установите batchSize запроса на выборку в 2,5 раза больше размера экрана(произвольное значение, которое хорошо сработало для меня)
- I всегда создать пользовательских NSManagedObjects (бесстыдный плагин) для моих сущностей.Это облегчает работу с сущностью, поскольку обеспечивает автозаполнение имен свойств, и на самом деле более производительно , чем getValueForKey: (согласно apple)
- Если у сущностей много данных в каждом, Я экспериментирую с setReturnsObjectsAsFaults, чтобы увидеть, помогает ли задержка загрузки тяжелых данных в память, а не снижает производительность
- Если мне нужны только пара свойств каждой сущности, я реорганизую свои сущности так, чтобы был заголовок'сущность, содержащая только те свойства, которые мне нужны в представлении списка, и' полная 'сущность со всеми данными (упомянутые в заголовке, чтобы облегчить загрузку для подробного представления)
- Если мне нужно толькоодно свойство от каждой сущности, например, чтобы получить список уникальных дат встреч, на которые происходят встречи для отображения индикатора в календаре, я использую propertiesToFetch в сочетании с NSDictionaryResultsType , чтобы вернуть только массив этих значений