2015-03-18 4 views
0

Я пытаюсь сохранить новые настройки табуляции, сгенерированные, когда пользователь редактирует UITabBar с помощью кнопки «Больше» -> «Редактировать», присутствующей по умолчанию (приложение имеет более 5 элементов панели вкладок). Я использую раскадровку и файлы xib/nib. Контроллеры представлений связаны с помощью раскадровки и отношений segues.Сохранение порядка UITabBarController

Я установил пользовательский класс TabBarController и добавлю делегаты для self.tabBarController и self.tabBar как self. К сожалению, заказ не сохраняется после закрытия приложения.
В NSLog сообщения печатаются так, я знаю, что код входа в функции, указанные ниже

Вот код для сохранения/чтения порядка, который я использую:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.tabBarController.delegate=self; 
    self.tabBarController.tabBar.delegate=self; 
    // Do any additional setup after loading the view. 
} 

-(void) viewWillAppear:(BOOL)animated 
{ 
    NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"tabOrder"]; 
    NSArray* tabBarItems=[NSKeyedUnarchiver unarchiveObjectWithData:data]; 
    if (tabBarItems) 
    { 
     [self.tabBarController.tabBar setItems:tabBarItems animated:YES]; 
     NSLog(@"Loading changed Order%@",tabBarItems); 
    } 
} 

-(void)tabBar:(UITabBar *)tabBar didEndCustomizingItems:(NSArray *)items changed:(BOOL)changed 
{ 
    NSLog(@"tab bar customizer"); 
    if (changed) 
    { 
     NSLog(@"order was changed"); 
     NSData *dataSave = [NSKeyedArchiver archivedDataWithRootObject:items]; 
     [[NSUserDefaults standardUserDefaults] setObject:dataSave forKey:@"tabOrder"]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
     NSLog(@"%@",self.tabBarController.viewControllers); 
     [self.tabBarController setViewControllers:items animated:YES]; 
    } 
} 

ответ

0

Ваша проблема является просто например, custom tabbar order, вы должны сохранить тег viewController, а не сам объект. Поскольку экземпляр пользовательского интерфейса имеет некоторые данные, которые нельзя хранить в NSData. Вы должны сохранить новый заказ тегом viewcontroller, а затем в следующий раз, чтобы открыть приложение, просто восстановите новый порядок, установив контроллеры просмотра контроллера панели.

+0

Вот проблема, я в конечном итоге, когда я пытаюсь этот подход: 1. Я не используя отдельные NIB/XIb файлы, но вместо раскадровки 2. self.tabBarController.viewControllers остается пустым, даже при редактировании заказа 3 . Программа не вводит tabBarController '- (void): (UITabBarController *) tabBarController didEndCustomizingViewControllers: (NSArray *) viewControllers changed: (BOOL) изменил {}' функции после завершения редактирования. 4. Я не могу ссылаться на tabBarController из файла приложения delegate.h/.m –