【发布时间】:2011-07-12 07:31:36
【问题描述】:
我的猜测是我在这里缺少一些核心数据基础知识,但这里是:
我的应用中有几个获取请求来处理不同事物的检索。在某些情况下,代码运行良好,会返回请求的对象。
在某些情况下,它会返回看似已发布的对象(例如,稍后尝试引用返回结果的几行代码会给出 EXC_BAD_ACCESS)。当我在代码中设置各种断点和日志语句并逐步执行它时,也会在代码的其他位置偶尔获得 SIGABRT 或 EXC_BAD_ACCESS。
在任何情况下,似乎都是在我去引用获取请求的结果时。
这是一个这样的获取请求的示例:
// Who am I?
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *signedInPersonId = [defaults stringForKey:@"signedInPersonId"];
// Return (if any) the Request object with given UUID
RequestStrings *r = [[RequestStrings alloc] init];
NSEntityDescription *description = [NSEntityDescription entityForName:r.table_Request inManagedObjectContext:moc];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(UUID == %@) && (dataOwnerId == %@)", UUID, signedInPersonId];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:description];
[request setPredicate:predicate];
NSError *error = nil;
NSArray *requests = [moc executeFetchRequest:request error:&error];
Request *returnRequest = nil;
if (requests != nil) {
if ([requests count] > 0) {
NSLog(@"getRequestWithId - requests array: %@, first: %@", requests, [requests objectAtIndex:0]);
returnRequest = [requests objectAtIndex:0];
}
else {
returnRequest = nil;
}
}
[r release];
[request release];
return returnRequest;
附:这里有更多信息
在某些情况下,相同的代码将返回所需的对象,或者抛出一个异常,指出[NSCFNumber length] 是一个无法识别的选择器。不确定相同的实体描述 + 获取请求如何在一种情况下返回一个数组,在另一种情况下返回一个数字。
【问题讨论】:
标签: iphone ios memory core-data reference