Я получаю неожиданное поведение с CoreData и NSPredicate.В большой базе данных у меня есть разные управляемые объекты, связанные друг с другом.Однако у меня проблема со следующим.При задании идентификатора (NSNumber, заданный как NSString для этой функции) я не получаю результат, если сначала не сохраню весь контекст.Я не хочу этого делать, так как это занимает слишком много времени (так как это большой набор данных).Код:
- (DOSite *) findSite:(NSString *) siteId {
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(id = %@)", siteId];
[NSFetchedResultsController deleteCacheWithName:nil];
[[self fetchedResultsController].fetchRequest setPredicate:predicate];
NSError *fetchError;
if (![[self fetchedResultsController] performFetch:&fetchError]) {
// Handle the error.
// This is a serious error and should advise the user to restart the application
NSLog(@"Fetching data error: %@", [fetchError localizedDescription]);
}
if([[[self fetchedResultsController] fetchedObjects] count] == 0){
return NULL;
}
return (DOSite *)[[[self fetchedResultsController] fetchedObjects] objectAtIndex:0];
}
Поэтому, когда я добавляю x элементов (используя +[NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]
), при выполнении поиска по всем элементам возвращается правильное количество элементов.
При поискестрока (например, predicateWithFormat:@"(name LIKE %@)"
) Я получаю положительные результаты, но при использовании приведенного выше кода predicateWithFormat:@"(id = %@)
я получаю нулевые результаты.
Единственный способ получить результаты - сохранить весь контекст и затем выполнитьfetchRequest, потом вдруг это сработает.
Так что должно быть что-то маленькое, я ошибаюсь в поиске идентификатора, мне просто кажется, что я слеп, чтобы найти его и потратить на него два дня, чтобы сузить его до этоготочка.Есть кто-нибудь, кто может дать мне совет по этому поводу?