我正在尝试保存用户使用默认情况下存在的“更多” - >“编辑”按钮编辑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];
}
}
答案 0 :(得分:0)
你的问题就像这个custom tabbar order一样,你应该存储viewController标签,而不是对象self。因为UI实例具有一些无法存储在NSData中的数据。您必须通过viewcontroller标签保存新订单,然后在下次打开应用程序时通过设置tabbar controller viewcontrollers恢复新订单。