我正在使用如下代码将一个视图控制器推到导航控制器的堆栈中,该代码位于我的TableViewController的didSelectRowAtIndexPath方法中:
MyViewController *myViewController = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
MyObject *myO = (MyObject *)[appDelegate.myOs objectAtIndex:indexPath.row];
myViewController.amount = myO.amount;
[self.navigationController pushViewController:myViewController animated:YES];
[myViewController release];
如果我取消注释最后一行,那么在返回时应用程序会崩溃并显示错误:-[CALayer release]: message sent to deallocated instance 0xd4f860
我进一步研究后发现崩溃可以进一步缩小到MyViewController的dealoc方法中调用[super dealoc]。取消注释"[super dealoc]"后,我们不会崩溃。
我无法进一步缩小问题范围。 "super"应该是UIViewController类,而我无法进一步调查那个dealoc方法……难道可以吗?也许有一种方法可以查看0xd4f860指向的具体内容,但我不知道怎么做?有什么想法吗?