2013-10-10 5 views
5

Я использую SWRevealViewController в своем приложении (для получения боковой панели слайда), однако всякий раз, когда пользователь переходит к другому viewController, как «настройки» и возвращается, все сбрасывается. Я понимаю, что это нормальное поведение для раскадровки, поскольку создается новый VC, и каждый раз вызывается viewDidLoad. Я попытался обойти это, сохранив VC в массиве в AppDelegate, а затем вернувшись к исходному элементу viewController, это предотвратило обращение к viewDidLoad, когда исходный VC изначально был повторно представлен, но я все же нашел, что get get вызван случайным образом при перемещении между veiwcontroller's, сбросив все мои свойства и т. д. При исследовании Apple документация говорит, что не предполагать, что viewDidLoad будет вызываться только один раз.Вызывает ли viewDidLoad более одного раза в UITabBarController?

Является ли это поведение очевидным в UITabBarController при переключении вкладок, поскольку я думаю о том, чтобы переключать SWRevealViewController и использовать это вместо этого, если это будет меньше головной боли.

Должен ли я обращаться с этим по-другому, т.е. сохранение «состояния» в NSUserDefaults и восстановление на viewDidLoad?

Заранее спасибо.

+0

поведение NavigationController и TabBar различно. В контроллере навигации, если у вас есть 1 (root), 2,3 viewControllers и находятся в viewController1, тогда у вас будет только 1. если вы перейдете на 2, то у вас будет 1,2, если вы вернетесь к 1, у вас есть 1 (2 ушел, т.е. установлен на ноль), если вы вернетесь к 2, то 2 создается с нуля. Если вы идете 1,2,3, то у вас есть все 3. Если это было в tabBar, во все моменты у вас есть 1,2,3, независимо от того, нахожусь на экране или нет – Honey

ответ

9

viewDidLoad вызывается ровно один раз, когда UIViewController сначала загружается в память. Здесь вы хотите создать экземпляр любых переменных экземпляра и построить любые UIViews, которые живут на протяжении всего жизненного цикла этого UIViewController.

В UITabBarController также используется viewdidLoad для UIViewController, когда вы переключаете вкладки.

+0

** 1) ** Что может заставить его получить загружен снова? Что, если бы у нас была небольшая память, и приложение само удалило viewcontroller ... будет лизываться 'viewDidLoad' при следующем открытии? ** 2) ** Также не имеет значения ** как ** создан viewController? т.е. если вы наивно создаете viewController каждый раз, когда вы обращаетесь к нему? <- Я только читал об этом, но не знаю, как это можно сделать. Буду признателен, если вы сможете это уточнить. – Honey

+0

привет, вам, какой метод следует использовать для стрельбы каждый раз, когда я нажимаю на вкладку? –

+0

@NadeemKhoury: Вы можете использовать методы 'UITabBarControllerDelegate'. –

1

viewDidLoad() метод вызывается только один раз. Его неотъемлемая часть цикла.

Он вызывается, тогда соответствующий класс UIViewController загружается в память.

И да, если вы хотите инициализировать любые свойства или получить доступ и изменить код NSUserDefaults, его можно и нужно выполнить в методе viewDidLoad.

Что касается вашего приложения, каждый раз, когда пользователь будет переключаться между различными UIViewControllers, метод viewDidLoad будет вызываться для каждого пункта назначения UIViewController.

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

+1

Предупреждение о памяти может привести к его повторному вызову. – BooRanger

+0

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

+0

Я был бы удивлен, если мое приложение получит предупреждения о памяти, это только очень просто, но я буду проверять это. Я попытаюсь обновить свой оригинальный пост с помощью своего кода. –

Смежные вопросы