单击tabbarcontroller中的选项卡时,iOS应用程序崩溃

时间:2014-08-04 15:25:53

标签: ios uitabbarcontroller

我正在为iPhone创建一个iOS应用程序,我遇到了我正在使用的UITabBarController的问题。每当我单击选项卡栏中的选项卡时,程序都会崩溃。我没有使用故事板或任何类型的东西,并选择通过代码完成所有事情。话虽这么说,这是设置标签的代码。

- (void) loadView
{
    // create main view
    UIView *contentView = [[UIView alloc] initWithFrame: [[UIScreen mainScreen] applicationFrame]];
    contentView.backgroundColor = [UIColor grayColor];
    self.view = contentView;

    // now create the tab pages
    StatusViewController *status = [[StatusViewController alloc] initWithNibName: nil bundle: nil];
    OperationsViewController *operations = [[OperationsViewController alloc] initWithNibName: nil bundle: nil];
    self.statusTab = status;
    self.operationsTab = operations;

    status.title = @"Status";
    operations.title = @"Operations";

    // create the tab bar controller and add all tabs
    UITabBarController *tabbar = [[UITabBarController alloc] init];
    tabbar.view.frame = CGRectMake(0, 0, 320, 460);
    NSMutableArray *tabs = @[status, operations];
    [tabbar setViewControllers:tabs];
    [self.view addSubview: tabbar.view];
}

选项卡底部正确显示选项卡,默认情况下,第一个选项卡的内容正确加载,单击任何选项卡会导致其崩溃。当我崩溃时,我没有得到堆栈跟踪,而XCode只是高亮......

@autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([MyAppDelegate class]));
}

哪个不是很有用(如果有人可以评论如何在Xcode 5.1.1中获得一个堆栈区域,我将非常乐意用附加信息更新这篇文章)。

我创建的类StatusViewControllerOperationsViewController都只是UIViewController的子类,我在loadView中添加了自定义逻辑。

我在StackOverflow上看到了其他似乎相似的问题,但是他们使用的是interfacebuilder / storyboard,或者其他的东西不同,我觉得有必要提问。期待听到任何人可以提供帮助的任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:4)

这是由于内存问题(通常称为僵尸)。您不能保留UITabViewController,因此应由UITabViewController管理的视图会导致崩溃。

当您使用其他UIViewController管理的视图时,您可以将其添加到父childViewControllers的{​​{1}}数组中。

UIViewController

Apple将此功能称为"自定义容器视图控制器" https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html