Основные данные: выполнение запросов на выборку в loadView? - PullRequest
0 голосов
/ 06 июня 2011

У меня есть подкласс UIViewController, вид которого создается программно в методе loadView. Основная цель представления состоит в отображении информации, получаемой из хранилища через основные данные. Способ создания представления будет отличаться в зависимости от того, сколько объектов получено из выборки, поэтому мне нужна эта информация заранее. Я считаю, что все учебники и примеры кода, которые я видел до сих пор, показывают запросы на выборку, выполняемые в viewDidLoad (или позже), поэтому я просто хотел спросить, есть ли причины избегать этого в loadView. Имеет ли какое-то значение, если я использую выборки в loadView, как так или в viewDidLoad? Спасибо.

- (void)loadView {
    [super loadView];

    NSError *error = nil;
    if (![self.fetchedResultsController performFetch:&error]) {
        ///
    }

    //...go on to load the view
}

Ответы [ 3 ]

0 голосов
/ 06 июня 2011

Если вы загружаете данные один раз за цикл установки View Controller, то установка их в loadView должна быть в порядке.

Однако, если у вас есть какие-либо кнопки или входы пользовательского интерфейса, которые могут вызвать его перезагрузку, вы можете создать свой собственный метод reloadData в вашем контроллере представления.

Взгляните на некоторые примеры UITableView с Core Data, чтобы почувствовать общий подход к загрузке основных объектов данных в Какао. UITableView использует шаблон маховика, то есть он повторно использует объекты ячейки таблицы (строки) и просто вставляет новые данные по мере их поступления.

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

0 голосов
/ 06 июня 2011

Выполнение выборки при viewDidLoad в порядке. Самое главное, где вызываются методы для настройки ваших объектов вида. Исходя из вашего объяснения, выборка данных должна выполняться раньше, поэтому просто убедитесь, что ваши [super viewDidLoad] или другие методы суперкласса не выполняют никаких настроек представления, прежде чем вы на самом деле получите свои данные.

Итак, организация вашего viewDidLoad таким образом обеспечит получение и подготовку данных для просмотра:

- (void)viewDidLoad {
    [super viewDidLoad] // 0: Make sure you are fully aware of what it's doing.

    // 1: Fetch your data

    // 2: Customize you view based on fetched data
}

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

Если вы действительно хотите инициализировать переменные вашего экземпляра отдельно от других объектов представления, я предлагаю вам использовать - (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle вместо этого.

0 голосов
/ 06 июня 2011

Похоже, что INIT может быть хорошим местом для этого.

...