如何调试 Core Data 在获取请求时出现的崩溃问题

3
第二次执行
[[MOC executeFetchRequest:request error:&error] lastObject];

说过之后

NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Login" inManagedObjectContext:MOC]];
NSError *error = nil;

程序崩溃并出现EXC_BAD_ACCESS错误。调试窗口显示,崩溃发生在Core Data堆栈的深处。有什么想法可以调试以找出问题所在?

alt text

(just in case, 这是图片的链接 http://tinypic.com/r/zmavph/6 点击链接中的图片,调试窗口会变大)
干杯
Nik
2个回答

3

EXC_BAD_ACCESS 是指内存错误。在释放对象后仍继续使用它,这会导致错误。如果没有更多的代码,调试这种错误将会很困难。

您是否尝试运行分析器(Xcode > Build > Build and Analyze)?

您还可以尝试拆分获取和数组查找的过程:

NSArray *fetchedObjects = [MOC executeFetchRequest:request error:&error]
if (!fetchedObjects) {
    NSLog(@"Error fetching Login: %@", [error localizedDescription]);
    abort();
}

NSManagedObject *loginObject = [fetchedObjects lastObject];

1
正如gerry3所建议的那样,这不是Core Data的问题,而是一个简单的对象过度释放问题。尝试打开NSZombie并跟踪过度释放的对象。 - Marcus S. Zarra

1

苹果公司在CoreData调试方面有一个非常有用的页面


2
上面的链接已经失效,请尝试使用这个链接:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/TroubleshootingCoreData.html - Glavid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接