UIScrollview для отображения пользовательского UIView, состоящего из основных атрибутов данных: логика для разработки этого? - PullRequest
0 голосов
/ 26 июня 2011

Не могли бы вы сказать мне, если моя логика звука?Потому что я все еще очень плохо знаком с iOS (продолжительностью около недели) и буду очень признателен за ваши отзывы, прежде чем отправиться в неправильном направлении.

У меня есть настройки основных данных с фотографией.И то, что я пытаюсь сделать, - это создать объект типа «заметка» в моем UIScrollView.На карточке заметки будет UILabel вверху, за которым следует UIImage в середине и две кнопки UIB под изображением (т. Е. Кнопки будут «отправить» или «отменить»).Моя цель состоит в том, чтобы эти объекты, подобные карточкам заметок, можно было прокручивать, например изображения, в том числе для переворачивания страниц.

По большей части, я думаю, я позаботился о деталях ScrollView и Page Turner.Мне просто неясно, как лучше создать объекты карты заметок.

Должен ли я просто создать подкласс UIView, а затем программно создать экземпляры карты заметок или есть способ создать XIBфайл для UIView, чтобы я мог создать IBOutlets из класса для представления?Потому что, если последнее возможно, я бы хотел сделать это, но не знаю, как заставить файл XIB принимать выходы от объекта UIView, в отличие от UIViewController.

За пределами пользовательского UIView I 'Мне до сих пор неясно, как мне следует подходить к запросу этих объектов из основной базы данных, чтобы при загрузке окна «ожидающие решения» у меня были прокручиваемые объекты для принятия решения.

В моем классе UIScrollViewController в разделе viewDidLoad можновы говорите мне, если мне нужно использовать цикл For, состоящий из FetchRequests вместе с кодом, который затем выделяет inits и устанавливает мои переменные UIView, используя основные атрибуты данных?Потому что я просто не уверен, звучит ли это правильно и есть ли лучшая альтернатива.

1 Ответ

1 голос
/ 26 июня 2011

Вы можете создать пользовательский класс-потомок 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 , чтобы вернуть только массив этих значений
...