我正在为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中获得一个堆栈区域,我将非常乐意用附加信息更新这篇文章)。
我创建的类StatusViewController
和OperationsViewController
都只是UIViewController的子类,我在loadView
中添加了自定义逻辑。
我在StackOverflow上看到了其他似乎相似的问题,但是他们使用的是interfacebuilder / storyboard,或者其他的东西不同,我觉得有必要提问。期待听到任何人可以提供帮助的任何帮助。
谢谢!
答案 0 :(得分:4)
这是由于内存问题(通常称为僵尸)。您不能保留UITabViewController
,因此应由UITabViewController
管理的视图会导致崩溃。
当您使用其他UIViewController
管理的视图时,您可以将其添加到父childViewControllers
的{{1}}数组中。
UIViewController
Apple将此功能称为"自定义容器视图控制器" https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html