Итак, чтобы ответить на ваш первый вопрос, инициализатор, который вызывается в этом случае, является initWithCoder:, а не init.Поэтому, если вы перенесете инициализацию NSArray туда на initWithCoder: вы должны обнаружить, что она доступна до загрузки вашего представления.
Не забудьте также вызвать инициализатор вашего суперкласса.Таким образом, такой шаблон будет работать:
-(id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
// initialize what you need here
}
return self;
}
Вы также получите awakeFromNib , вызванный после initWithCoder: и после того, как все ваши розетки были подключены, так что если вашинициализация зависит от заполняемых торговых точек, тогда есть возможность выполнить эту инициализацию там.
И, конечно, у вас есть viewDidLoad и viewWillAppear: .Я не знаю, есть ли общий ответ на «правильный» метод для использования (вопросы 2 и 4).Это зависит от того, сколько у вас есть данных, как часто их нужно обновлять и сколько времени требуется для загрузки.Мое мнение таково, что это решение должно приниматься для каждого случая.
По вопросу № 3, у вас есть пример того, что вы видели там?Инициализатор определенно будет вызываться перед viewDidLoad.Хитрость заключается в том, чтобы узнать, какой инициализатор вызывается.
Имейте в виду, что viewDidLoad может вызываться несколько раз в течение срока службы контроллера представления.Так что будьте готовы к этому.И, конечно, viewWillAppear: будет вызываться несколько раз в течение срока службы контроллера представления.
Надеюсь, это поможет.