应用程序在UITabBarController委托方法中崩溃

时间:2011-05-31 10:44:01

标签: iphone objective-c uitabbarcontroller

您好 我试图动态添加和删除标签栏元素。有两个数组。首先显示一个名为“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];
 }

}

任何人都可以告诉我我在哪里做错了吗? 最诚挚的问候

4 个答案:

答案 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);

检查您的代码