您好 我试图动态添加和删除标签栏元素。有两个数组。首先显示一个名为“More”的tabbaritem,当用户按下More时,其他数组将添加到tabbar。用户可以通过在第二个数组中按Less tabbaritem返回第一个数组。问题是,当我经常按顺序按更多,更少,更少,更少,更多,更少 - 应用程序在最后减少后崩溃。数组对我来说似乎没问题,tabbar控制器也是如此。我无法弄清楚问题。 下面是标签栏委托方法的代码。
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"selected view controller is :%@",viewController);
if(viewController.view.tag == -1){
[self.tabBarController setViewControllers:self.level2TabBarItems animated:YES];
[self.tabBarController setSelectedIndex:0];
}else if(viewController.view.tag == -2){
[self.tabBarController setViewControllers:self.level1TabBarItems animated:YES];
[self.tabBarController setSelectedIndex:0];
}
}
任何人都可以告诉我我在哪里做错了吗? 最诚挚的问候
答案 0 :(得分:1)
我有类似的问题。我猜你在你的数组中构造了VC的新实例,因此频繁切换更多/更少会导致从旧实例调用方法(此时尚未替换)。
不幸setViewControllers
方法(如documentation所述)自动删除调用dealloc
的旧视图控制器,似乎没有其他方法可以重用它们。
在您的情况下,您可以尝试禁用选择标签,直到tabBarController:didSelectViewController:
执行实施(我没有测试):
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
self.selectLock = YES;
// your code
self.selectLock = NO;
}
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
return !self.selectLock;
}
答案 1 :(得分:0)
在这里发表评论NSLog。这不是打印此格式的正确格式。
答案 2 :(得分:0)
可能是你的阵列是空的。尝试设置一个断点,你会发现导致崩溃的解决方案。
答案 3 :(得分:0)
我认为如果不满意这个条件
只需使用此NSLog(@"%d",viewController.view.tag);