Я испытываю необычную ошибку в своем приложении iOS.NSManagedObjectContext executeFetchRequest: error: throws exception: OS_xpc_error
Мое приложение загружает большое количество объектов JSON, которые затем вставляются в Core Data. Каждая загрузка принимает следующие шаги:
- Открыть подключение к сети и получить объект JSON
- Одна из основных NSManagedObject создается
- Любое число между созданы
- Для некоторых 0 и около 20 дополнительных NSManagedObjects, выборка запрос для существующих NAManagedObjects выполняется для поиска существующих совпадающих объектов, и создается связь, или создается новый объект, если он не найден.
Вот соответствующий фрагмент кода, где song
является экземпляром подкласса NSManagedObject и Category
является другой NSManagedObject подкласса:
for (NSString *category in dict[@"categories"]) {
NSError *error;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Category"];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"name like %@", category];
NSArray *fetchResults = [_moc executeFetchRequest:fetchRequest error:&error];
Category *c;
if (fetchResults.count > 0) {
c = fetchResults[0];
} else {
c = [NSEntityDescription insertNewObjectForEntityForName:@"Category" inManagedObjectContext:_moc];
c.name = category;
}
[song addCategoriesObject:c];
}
Это прекрасно работает, пока после нескольких сотен загрузки, и -включения, приложение будет разбиваться. Количество успешных загрузок будет отличаться, по-видимому, случайным образом.
линия вызывает исключение составляет NSArray *fetchResults = [_moc executeFetchRequest:fetchRequest error:&error];
и выход журнала эта строка:
2014-11-17 10:05:54.265 MyApp[3211:1774124] Communications error: <OS_xpc_error: <error: 0x19ce62a80> { count = 1, contents =
"XPCErrorDescription" => <string: 0x19ce62e78> { length = 22, contents = "Connection interrupted" }
}>
2014-11-17 10:06:03.631 MyApp[3211:1773135] *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x174075ac0> was mutated while being enumerated.'
*** First throw call stack:
(0x188111e48 0x198b140e4 0x1881117fc 0x187dc9cf8 0x1000965d8 0x100097de0 0x1003a4e30 0x1003a4df0 0x1003af854 0x1003a8120 0x1003b175c 0x1003b2f18 0x1993352e4 0x199334fa8)
libc++abi.dylib: terminating with uncaught exception of type NSException
Мои попытки Google эту ошибку оказались бесплодными. (Серьезно - я никогда не искал ошибки и получили нулевой результат :)
Кто-нибудь еще испытал подобную ошибку и может мне точку в правильном направлении? На этот раз я нахожусь в полной утрате того, где даже начать с моего поиска здесь.