我正在研究我的第一个核心数据iPhone应用程序。我正在使用导航控制器,并且根视图控制器显示4行。点击第一行将我带到第二个表视图控制器。但是,当我单击后退按钮时,重复行按,再次单击后退按钮,然后再次点击该行,出现错误。我一直在研究这一个星期没有成功。如何在第二个视图控制器上显示核心数据?
我可以很容易地重现该错误:
- 创建一个新的基于导航的应用程序,使用核心数据进行存储,称它为它创建MyTestAppDelegate和RootViewController的MyTest的。
- 添加新的UIViewController子类,使用UITableViewController和xib将其称为ListViewController。
- 将RootViewController.h和.m中的代码复制到ListViewController.h和.m中,适当地更改文件名。为了简化代码,我从所有变量中删除了尾部的“_”。
- 在RootViewController中,我添加了#import ListViewController.h,设置一个数组以显示4行,并在单击第一行时导航到ListViewController。
在ListViewController.m,我添加#进口MyTestAppDelegate.h”和下面的代码:
- (void)viewDidLoad {
[super viewDidLoad];
if (managedObjectContext == nil) {
managedObjectContext = [(MyTestAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
..
}
导致该错误的顺序是抽头行,返回,抽头行,返回,抽头行 - >错误。 managedObjectContext被第三次合成。我感谢你的耐心和你的帮助,因为这对我来说毫无意义。
附录:我可能有一个部分解决方案。 http://www.iphonedevsdk.com/forum/iphone-sdk-development/41688-accessing-app-delegates-managed-object-context.html
如果我不在.m文件中释放managedObjectContext,则错误消失。这是好的还是会导致我的问题?
- (void)dealloc {
[fetchedResultsController release];
// [managedObjectContext release];
[super dealloc];
}
附录2:请参阅下面的解决方案。对格式问题抱歉 - 这是我的第一篇文章。