我无法找到问题所在,但此代码崩溃了。我是否过度释放任何物体?
settings = [[SettingsViewController alloc] initWithNibName:@"SettingsController" bundle:nil];
settings.hidesBottomBarWhenPushed = YES;
NSArray * arrayWithRootController = [[NSArray alloc] initWithObjects:settings, nil];
[(UINavigationController*)([self.tabBar.viewControllers lastObject])setViewControllers:arrayWithRootController];
[arrayWithRootController release];
[settings release];
如果我删除该行
[settings release];
应用程序没有崩溃。但我很确定它的正确性。问题可能在另一个地方吗?
有什么想法吗?非常感谢
答案 0 :(得分:1)
你不会在这个片段中过度发布,但显然有些事情是不对的。将根视图控制器添加到数组将保留它,但仅限于数组的生命周期。当阵列死亡时,其中的所有对象也被释放(我猜这里发生了什么)。
尝试一些事情: 首先,确保你将阵列放在你认为的位置:
[(UINavigationController*)([self.tabBar.viewControllers lastObject])setViewControllers:arrayWithRootController];
您期望[self.tabBar.viewControllers lastObject]
是什么?你确定这是你想要分配新阵列的地方吗?如果接收器无效,则您的阵列将不会保留在下一行中,这意味着视图控制器也将被释放。
我不熟悉您的架构,但看起来您正在为视图控制器分配一组视图控制器。 self.tabBar
是导航控制器,您可以在其上调用setViewControllers
。但self.tabBar.viewControllers lastObject
...大概是一个视图控制器,但不一定是导航控制器,它可能不会响应setViewControllers(在这种情况下它应该崩溃,除非它是零,我猜它可能是)
最后,尝试使用“工具”工具“僵尸”来查看是否可以查明非预期版本的来源。