【问题标题】:App Crashes in UITabBarController delegate methodUITabBarController 委托方法中的应用程序崩溃
【发布时间】:2011-05-31 10:44:01
【问题描述】:

嗨 我正在尝试动态添加和删除标签栏元素。有两个数组。首先显示一个添加了名为“更多”的 tabbaritem,当用户按下更多时,其他数组被添加到选项卡栏。用户可以通过在第二个数组中按 Less tabbaritem 返回到第一个数组。问题是,当我经常按更多、更少、更多、更少、更多、更少的顺序按更多和更少标签项时 - 应用程序在最后一个更少之后崩溃。数组对我来说似乎没问题,标签栏控制器也是如此。我无法弄清楚问题所在。 下面是标签栏委托方法的代码。

 - (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];
 }

}

谁能告诉我我哪里做错了? 最好的问候

【问题讨论】:

  • 你能把崩溃日志贴在这里吗?
  • 我忘了说崩溃发生在 [self.tabBarController setViewControllers:self.level1TabBarItems animated:YES];对于这种情况,我的 Library/Logs 文件夹中也没有生成崩溃报告。我在断点的帮助下检查了 uitabbarcontroller 和 level1TabbarItems,两者都不为 null 或为空。

标签: iphone objective-c uitabbarcontroller


【解决方案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;
}

【讨论】:

    【解决方案2】:

    在这里评论 NSLog。这不是打印的正确格式。

    【讨论】:

      【解决方案3】:

      可能是您的数组为空。尝试设置一个断点,您会找到导致崩溃的行的解决方案。

      【讨论】:

      • 不,先生,数组不是空的:(
      • 然后调试您的应用程序,您一定会找到崩溃的解决方案
      【解决方案4】:

      我认为 if 和 else if 都不满足这个条件

      只需使用此NSLog(@"%d",viewController.view.tag); 检查您的标签

      【讨论】:

      • 应用程序在 [self.tabBarController setViewControllers:self.level1TabBarItems animated:YES] 上崩溃;所以我不认为这个问题不在 NSLog 中。条件运行良好。
      猜你喜欢
      • 1970-01-01
      • 2011-02-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多