也许我已经看了太久了;)我的应用程序有一个NavigationController和几个ViewControllers。从其中一个ViewControllers向下(mainViewController),从rootViewController加载,我有下面的代码。在PushViewController到dataViewController并返回后(例如按下后退按钮),应用程序崩溃。
dataViewController加载得很好,但是当点击navigationController的后退按钮时,应用程序崩溃并出现对象异常。如果我删除:
[dataViewController release];
该应用程序正常工作。这很奇怪,因为dataViewController是以相同的方法初始化的。 有什么想法吗?
- (void) locationPage
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"NotifyRemoveMap" object:nil];
MyAppDelegate *app = [[UIApplication sharedApplication] delegate];
UINavigationController *navigation = app.navigationCantroller;
[navigation popToRootViewControllerAnimated:NO];
DataViewController *dataViewController = [[DataViewController alloc] initWithNibName:@"DataView" bundle:nil];
[dataViewController setCategoryId:category];
MyLanguage *lang = app.lang;
Mylocation *location = [lang locationForCategoryId:category];
dataViewController.title = location.name;
NSArray *locationArray = [lang locations];
dataViewController.locations = locationArray;
[navigation pushViewController:dataViewController animated:YES];
[dataViewController release]; // With this removed, app doesn't crash
}
答案 0 :(得分:2)
甚至没有看过你的帖子。如果它是Exec-Bad-Access,我有两个字给你:
启用NSZombies。
请点击此链接:(它解释了解决任何不良访问问题需要了解的所有内容)
Phone Memory Debug with NSZombie and Instruments
干杯!
答案 1 :(得分:1)
当dataViewController被弹出并且你试图访问它时它可能会出现问题 - 它已经被释放了。您可以检查控制台以获取更多详细信息 - 更好的是,在调试模式下运行(调试配置和与调试器一起运行)。
您可以编辑问题以显示使用后退按钮运行的一些代码。
答案 2 :(得分:0)
您谈到发布dataViewController
但您的代码说detailsViewController
。您是否错误地复制和粘贴,或者是错误?
您应该考虑不使用app.navigationController
,而是使用self.navigationController
。更清洁的设计。对应用程序委托的依赖性较小,这通常被用作非常了解的frankensteinobject。