【发布时间】:2010-10-05 04:22:49
【问题描述】:
我正在开发我的第一个核心数据 iPhone 应用程序。我正在使用导航控制器,根视图控制器显示 4 行。单击第一行会将我带到第二个表视图控制器。但是,当我单击后退按钮时,重复行点击,再次单击后退按钮,然后第三次点击行,我得到一个错误。我已经研究了一周,但没有成功。
我可以很容易地重现错误:
- 创建一个新的基于导航的应用程序,使用 Core Data 进行存储,将其命名为 MyTest,它会创建 MyTestAppDelegate 和 RootViewController。
- 添加新的 UIViewController 子类,带有 UITableViewController 和 xib,将其命名为 ListViewController。
- 将代码从 RootViewController.h 和 .m 复制到 ListViewController.h 和 .m,并相应地更改文件名。为了简化代码,我从所有变量中删除了结尾的“_”。
- 在 RootViewController 中,我添加了#import ListViewController.h,设置一个数组以显示 4 行并在单击第一行时导航到 ListViewController。
在 ListViewController.m 中,我添加了#import 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:请参阅下面的解决方案。抱歉格式问题 - 这是我的第一篇文章。
【问题讨论】: