Мое приложение вылетает с ошибкой EXC_BAD_ACCESS :(Это давало мне головную боль в течение нескольких дней. Сбой происходит, когда многократное нажатие и выскакивание .. UIViewController, который в свою очередь, делает выборку асинхронным CoreData Через 3-4 раза обычно бывает упрощенная ситуация выглядит следующим образом:.Сбой приложений (EXC_BAD_ACCESS) при повторном просмотре управления/push с помощью асинхронного ввода данных ядра
у меня есть UINavigationController с UIViewController как rootController Это UIViewController делает толчок, как это:
UINavigationController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"List"]; // List is the StoryboardID of another UIViewController.
[self.navigationController pushViewController:controller animated:YES];
Далее, толкаемый UIViewController выполняет NSAsynchronousFetchR Equest так:
- (void)fetchData
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:self.entityName];
fetchRequest.predicate = self.basePredicate;
__weak typeof(self) weakSelf = self;
// Initialize asynchronous fetch request.
NSAsynchronousFetchRequest *asynchronousFetchRequest = [[NSAsynchronousFetchRequest alloc] initWithFetchRequest:fetchRequest completionBlock:^(NSAsynchronousFetchResult *result) {
dispatch_async(dispatch_get_main_queue(), ^{
weakSelf.fetchedItems = [NSSet setWithArray:result.finalResult];
});
}];
// Execute asynchronous fetch request.
[self.managedObjectContext performBlock:^{
NSError *asynchronousFetchRequestError = nil;
[weakSelf.managedObjectContext executeRequest:asynchronousFetchRequest error:&asynchronousFetchRequestError];
if (asynchronousFetchRequestError) {
DDLogError(@"Unable to execute asynchronous fetch result: %@, %@", asynchronousFetchRequestError, asynchronousFetchRequestError.localizedDescription);
}
}];
}
Катастрофа EXC_BAD_ACCESS происходит только при установлении результатов на fetchedItems вар кажется. При удалении этой строки это не происходит, поэтому я подозреваю, что с этим что-то должно быть. Я тестировал с помощью «Включить объекты зомби», когда я включаю это приложение, не разбивается и не дает мне никакой дополнительной информации.
Любая помощь была бы принята с благодарностью!
Существует хороший пример этого в следующем [ссылка] (https://www.bignerdranch.com/blog/new-in-core-data-and-iOS-8-asynchronous-fetching/). При этом он может иметь какое-то отношение к вам, используя GCD (т. Е. Вызов dispatch_async) вместо использования NSPersistentStoreAsynchronousFetchResultCompletionBlock для блока завершения, как в примере. – dean
Я пробовал это, и, похоже, это не изменило ситуацию. Тем не менее, статья действительно была полезной и привела меня к поиску рабочего решения (до сих пор). Благодаря! – Tonnie