UITabBarController не загружает больше представлений в applicationDidFinishLaunching

Я пытаюсь восстановить состояние моего приложения для iPhone с несколькими вкладками. Есть более 5 вкладок, каждая со своим собственным контроллером навигации. В applicationDidFinishLaunching я определяю, на какой последней вкладке находился пользователь, и устанавливаю ее с помощью

myTabController.selectedIndex = persistedTabIndex;

Затем я вызываю функцию на контроллере корневого представления этой вкладки, чтобы восстановить себя. Проблема в том, что если вкладка была перемещена на страницу «Дополнительно», представление не было загружено и вызов исчезает в области NIL. Есть ли способ заставить рассматриваемый контроллер представления загрузить его представление?

Большое спасибо за ваше внимание и ответы.


person Community    schedule 10.09.2009    source источник
comment
Примечание из документации: в версиях iOS до версии 3.0 это свойство отражает только индекс выбранного элемента панели вкладок. Попытка установить для этого значения индекс контроллера представления, который не отображается на панели вкладок, но вместо этого управляется контроллером навигации More, не имеет никакого эффекта. вместо этого используйте myTabController.selectedViewController.   -  person    schedule 22.06.2012


Ответы (2)


Я использую код, который нашел в Интернете, чтобы сохранить последнюю загруженную вкладку. В моем делегате приложения:

- (void)applicationDidFinishLaunching:(UIApplication *)application
{   
    // .. my app set up is here

    // Select the tab that was selected on last shutdown
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSInteger whichTab = [defaults integerForKey:kSelectedTabDefaultsKey];
    self.tabBarController.selectedIndex = whichTab;
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    // Save the current tab so the user can start up again in the same place.
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSInteger whichTab = self.tabBarController.selectedIndex;
    [defaults setInteger:whichTab forKey:kSelectedTabDefaultsKey];
}

и определение в моем файле интерфейса:

#define kSelectedTabDefaultsKey @"SelectedTab"

Это работает, если пользователь не переставляет вкладки, и в этом случае вам нужно обновить массив вкладок (индекс изменится).

Вот исходная страница, на которой я нашел код:

http://iphonedevelopment.blogspot.com/2009/09/saving-tabs.html

Я использую этот код в интерфейсе с вкладками, который показывает вкладку «Еще ...». Когда я выхожу на вкладке в разделе «Еще ...», интерфейс возвращается на эту вкладку, когда я перезапускаю приложение. Интерфейс не перезапускается в табличном представлении «Подробнее ...», но я не считаю это проблемой.

person nevan king    schedule 10.09.2009

Это странно; если контроллер навигации находится в массиве контроллера вкладок, он должен получать свой -loadView метод, вызываемый как обычно, когда он выбран, независимо от того, находится ли он в основном 4. Вы можете попробовать вручную вызвать [thePersistedController loadView] после его создания, но до того, как сообщить контроллеру вкладок, чтобы выберите это.

person Noah Witherspoon    schedule 10.09.2009