2014-11-17 2 views
1

Я испытываю необычную ошибку в своем приложении iOS.NSManagedObjectContext executeFetchRequest: error: throws exception: OS_xpc_error

Мое приложение загружает большое количество объектов JSON, которые затем вставляются в Core Data. Каждая загрузка принимает следующие шаги:

  1. Открыть подключение к сети и получить объект JSON
  2. Одна из основных NSManagedObject создается
  3. Любое число между созданы
  4. Для некоторых 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 эту ошибку оказались бесплодными. (Серьезно - я никогда не искал ошибки и получили нулевой результат :)

Zero Google hits for error

Кто-нибудь еще испытал подобную ошибку и может мне точку в правильном направлении? На этот раз я нахожусь в полной утрате того, где даже начать с моего поиска здесь.

ответ

0

OK Это похоже на сбой, и OS_xpc_error полностью не связаны.

OS_xpc_error появился до того, как отладчик ударил точку останова исключения. Я не понимал, что сообщение об исключении не было напечатано до тех пор, пока я не удалю по нему в отладчике. Соответствующая строка была связана с изменением __NSCFSet, и проблема заключалась в доступе к моему NSManagedObjectContext в фоновом потоке.

Создание нового фона NSManagedObjectContext, за this question, решил мою проблему.