NSManagedObjectContext executeFetchRequest:error:抛出异常:OS_xpc_error

时间:2014-11-17 10:26:55

标签: ios objective-c core-data xpc

我在iOS应用中遇到异常错误。

我的应用程序会下载大量JSON对象,然后将这些对象插入到Core Data中。每次下载都需要执行以下步骤:

  1. 打开网络连接并获取JSON对象
  2. 创建了一个主要的NSManagedObject
  3. 创建0到20左右的其他NSManagedObjects之间的任何数字
  4. 对于某些人来说,执行对现有NAManagedObjects的获取请求以查找现有匹配对象,并创建关系,或者如果找不到,则创建新对象。
  5. 以下是相关的代码段,其中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
    

    我尝试谷歌此错误已证明毫无结果。 (说真的 - 我从未搜索过错误并得到零结果:)

    Zero Google hits for error

    是否还有其他人遇到过类似的错误并且能指出正确的方向?有一次,我完全不知道从哪里开始我的搜索。

1 个答案:

答案 0 :(得分:0)

好吧看起来崩溃和OS_xpc_error完全无关。

OS_xpc_error出现在调试器命中异常断点之前。我没有意识到,直到我在调试器中按下继续之后才会打印异常消息。相关的一行是关于改变__NSCFSet,问题是由于在后台线程上访问我的NSManagedObjectContext。

根据this question创建新的背景NSManagedObjectContext已解决了我的问题。