Полагаю, мне здесь не хватает фундаментального понимания Core Data, но здесь говорится:
У меня есть несколько запросов на выборку в моем приложении для обработки поиска разных вещей. В некоторых случаях код работает нормально, возвращая запрошенные объекты.
В некоторых случаях он возвращает то, что кажется уже освобожденными объектами (например, всего лишь несколько строк кода, которые позже ссылаются на возвращаемый результат, дают 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;
P.S. Вот еще немного информации
В некоторых случаях один и тот же код возвратит нужные объекты или выдаст исключение, указывающее, что [NSCFNumber length]
является нераспознанным селектором. Не уверен, как одно и то же описание сущности + запрос на выборку могут вернуть массив в одном случае и число в другом.