У меня та же проблема.У меня есть большой предикат, состоящий из предикатов (с ЛЮБОЙ внутри), и после удаления подкаталога «ЛЮБОЙ» я не получаю никаких сбоев.
И как сохранить контекст, если вы используете автосохранение через UIManagedDocument?
---- Отредактировано ----
Проблема была решена просто путем установки try / catch и повторной инициализации предиката:
+ (NSArray *)productsByColorName:(NSString *)name {
NSManagedObjectContext *context = [DatabaseController sharedInstance].database.managedObjectContext;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:[[self class] tableName]];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY %K =[cd] %@", @"color.name", name];
request.predicate = predicate;
NSError *error = nil;
NSArray *matches = nil;
@try {
matches = [context executeFetchRequest:request error:&error];
} @catch (NSException *ex) {
NSLog(@"Exception: %@", [ex reason]);
predicate = [NSPredicate predicateWithFormat:@"%K =[cd] %@", @"color.name", name];
request.predicate = predicate;
matches = [context executeFetchRequest:request error:&error];
}
return matches;
}
Похоже, что существует проблема внутри базы данных, которая работает по-другому, если контекст не сохраняется после изменений.
Возможно, я что-то делаю не так (исправляю это обходным путем), но этот подход исправил мой сбой.Надеюсь, это поможет другим.