Подтвердить что ты не робот

IOS: Как узнать, вызван ли viewDidLoad?

Есть ли BOOL или какой-либо другой способ узнать, был ли viewDidLoad: вызван?

Мне нужно изменить свойство вида каждый раз, когда мое представление вступило в активную, но если представление никогда не было загружено, я не хочу преждевременно запускать viewDidLoad:. Если нет способа легко сказать, был ли вызван viewDidLoad: я просто добавлю BOOL с именем загруженный set в NO в init контроллера представления, а затем измените свойства вида после ввода active, если загружено YES или в viewWillAppear: если загружен НЕТ, тогда установите значение "ДА".

4b9b3361

Ответ 1

Используйте isViewLoaded. Помимо этого он делает именно то, что вы хотите, не так много сказать об этом. Документация проста:

Вызов этого метода сообщает, загружено ли представление. в отличие от view, он не пытается загрузить представление, если он не является уже в памяти.

Ответ 2

Возможно, вы должны запустить свой UIView в viewDidLoad, а затем изменить его каким бы то ни было способом внутри viewWillLayoutSubviews.

Ответ 3

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

- (void)viewDidLoad
{
    [super viewDidLoad];

    viewDidLoadCalled = YES; // Not actually the best way to do this...
    // Set up more view properties
}

Но, как говорит Томми, вам действительно нужно использовать isViewLoaded. Это связано с проблемой проверки, например,

if (!self.view) {
    // do something
}

который непреднамеренно загружает представление в силу запроса об этом.

Помните, что к моменту появления viewWillAppear:, просмотр всегда будет загружен. Кроме того, по более старым (до iOS 6, я думаю) релизам, представление может разгружаться и перезагружаться многократно по времени жизни контроллера. Обратитесь к очень красивой диаграмме жизненного цикла просмотра Nerd Ranch для поведения old. Это почти то же самое в iOS 6+, за исключением того, что представление не выгружается в условиях низкой памяти, а viewDidUnload не вызывается:

enter image description here