这对于我的 pre-ARC 代码来说可以正常工作,但是由于将所有项目重构为与 ARC 兼容,我开始遇到这个崩溃:
[CustomViewController respondsToSelector:]: message sent to deallocated instance
我的项目是一个带有拆分视图的 iPad 应用程序,但与苹果文档相反,以前的开发人员在拆分视图之前将另一个视图控制器放在应用程序启动时可见。所以我知道这不是正确的方法,但正如我所说的那样,它在 ARC 集成之前就可以工作,所以我需要解决这个问题。
根视图控制器包含一个项目菜单,每个项目显示一个要填写的详细信息表单,然后单击下一步按钮移动到下一个详细信息屏幕,等等。
当我单击放在根视图上的主页按钮返回主视图时,问题就开始了,这里是将用户移动到主屏幕的相关代码:
//this method is in the appdelegate, and it gets called when clikc on home button located on the root view
- (void) showHome
{
homeController.delegate = self;
self.window.rootViewController = homeController;
[self.window makeKeyAndVisible];
}
然后,当我单击按钮返回拆分视图(根/详细信息视图在哪里)时,应用程序因上述描述而崩溃。我用仪器分析了应用程序,负责的代码行位于RootViewController
方法didSelectRowAtIndexPath
中,这里是相关代码:
if(indexPath.row == MenuCustomViewController){
self.customVC=[[CustomViewController alloc] initWithNibName:@"CustomVC"
bundle:nil];
[viewControllerArray addObject:self.customVC];
self.appDelegate.splitViewController.delegate = self.customVC;
}
customVC
是一个强大的属性,我尝试直接分配并分配给实例变量,但这无助于修复崩溃。有什么想法吗 ?
编辑: 这是仪器给出的堆栈跟踪:
[self.appDelegate.splitViewController setViewControllers:viewControllerArray];//this line caused the crash
[viewControllerArray addObject:self.appDescVC];//this statement is called before the above one
self.custinfoVC=[[CustInfoViewController alloc] initWithNibName:@"CustInfo" bundle:nil];//this statement is called before the above one
self.appDelegate.splitViewController.delegate = self.appDescVC;//this statement is called before the above one
custinfoVC
并且appDescVC
是强大的属性。