保存UITabBarController的顺序

时间:2015-03-18 01:20:01

标签: ios objective-c

我正在尝试保存用户使用默认情况下存在的“更多” - >“编辑”按钮编辑UITabBar时生成的新标签订单(应用包含超过5个标签栏项目)。我正在使用storyboard而没有xib / nib文件。视图控制器通过使用故事板和关系segues链接起来

我设置了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];
    }
}

1 个答案:

答案 0 :(得分:0)

你的问题就像这个custom tabbar order一样,你应该存储viewController标签,而不是对象self。因为UI实例具有一些无法存储在NSData中的数据。您必须通过viewcontroller标签保存新订单,然后在下次打开应用程序时通过设置tabbar controller viewcontrollers恢复新订单。