У меня есть головоломка на руках.Xcode NSFetchRequest Не исполняется
Я делаю NSFetchRequest в моей базе данных SQLite в Xcode и запрос я бегу довольно прост:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
[[context undoManager] disableUndoRegistration];
NSError *error = nil;
NSEntityDescription *entity = nil;
entity = [NSEntityDescription entityForName:@"Workbook" inManagedObjectContext:context];
[request setEntity:entity];
[request setPredicate:[NSPredicate predicateWithFormat:@"language == 'English'" ]];
[request setSortDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc]initWithKey:@"sequence" ascending:YES]]];
NSLog(@"----- Request Print out: %@",request);
NSArray *subjects = [context executeFetchRequest:request error:&error];
В первый раз этот код работает он выполняет отлично.
я тогда изменить свою точку зрения и выполнить другую выборку и вставить в другой части приложения перейти обратно к виду, где размещен этот код и код затем не выполняет:
[context executeFetchRequest:request error:&error];
приложение Безразлично» t замораживание или сбой, и на консоли не отображаются сообщения об ошибках. Я даже включил протоколирование для своих SQL-запросов и я вижу, что sql для запроса никогда не выполняется во второй раз.
выборки запрос при входе выглядит следующим образом:
<NSFetchRequest: 0x20063120> (entity: Workbook; predicate: (language == "English"); sortDescriptors: (("(sequence, ascending, compare:)")); type: NSManagedObjectResultType;)
Это идентично, когда код выполняется в первый раз, и, когда он выполняет второй, так что сам запрос не может быть проблемой.
Возможно ли, что мой db заблокирован каким-то образом после предыдущих операций?
Может ли приложение свободно подключаться к БД, если БД не получает запрос?
Я оставил приложение, чтобы увидеть, если что-нибудь случится, но он просто сидит на неопределенный срок ...
Я попробовал все профилирование и т.д., что я могу думать, но не может найти что-нибудь очевидное, как утечки или странные процессы, происходящие.
Все оцененная помощь
Если вы используете управление отменами, вам нужно вызвать 'processPendingChanges' в контексте перед отключением диспетчера отмены ([см. Здесь] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData /Articles/cdUsingMOs.html)). что вы подразумеваете под «не выполнить»? он возвращает нуль или пустой массив? –
@ DanShelly он не возвращает ничего, что код прекращает выполнение в '[context executeFetchRequest: request error: & error];' и массив даже не заполняется ... Почему я хочу использовать менеджер отмены? Вы просто предлагаете отключить его? – H2wk
Эта строка: '[[контекст undoManager] disableUndoRegistration];' предлагаю вам использовать отмену управления, и его следует преследовать 'processPendingChanges'. чтобы не использовать управление отменой, просто установите диспетчер отмены на создание nil' uppon. «перестает исполнять» означает остановку (== app freez)? используете ли вы резьбу с тем же контекстом? –