我目前正在做从外部服务器下载的项目。然后我做JSON序列化,然后将其保存到核心数据数据库。我收到错误
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x69c8a10> was mutated while being enumerated.
指向我用作查询数据库的一部分的代码行:
NSArray *matches = [context executeFetchRequest:request error:&error];
我在查询数据库时使用的完整代码:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Product"];
request.predicate = [NSPredicate predicateWithFormat:@"product_id = %@", [productInfo objectForKey:@"id"]];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error = nil;
NSArray *matches = [context executeFetchRequest:request error:&error];
我只传递包含单个UIManagedDocument的对象。关于同样的问题,我在SO中经历了不同的帖子,很多人指出这是一个线程问题。
大多数情况下,他们建议有一种父子关系,它将在不同的线程上;一个上下文将负责下载内容,另一个将在将负责UI的主线程上。然后,稍后将合并完成的更改。我们已经开始启动它了,但这个提议的解决方案似乎有很多问题,正如Whitney Young在post中提到的那样。这些问题是,我引用
这些似乎是一个真正的痛苦@ _ @,所以如果你们中的任何人有一些关于如何做到这一点的其他好主意将会得到极大的认可。谢谢那些人!