在这个问题上花了几个小时,我只能在后台线程上使用核心数据而不是在主线程上找到解决方案。
在我的设置中,我通过自定义NSOperation类在后台进行一项操作,该类正在下载数据并保存到核心数据。虽然这是在后台发生的,但在主线程上我做了更多核心数据操作,导致" Collection被枚举时被突变"错误。
以下是NSOperation类的代码:
- (id)initWithContext:(NSManagedObjectContext*)parentContext andTrip:(MPTrip *)trip
{
self = [super init];
if(self) {
self.trip = trip;
self.parentContext = parentContext;
}
return self;
}
- (void)main
{
self.context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
self.context.persistentStoreCoordinator = [self.parentContext persistentStoreCoordinator];
[self.context performBlockAndWait:^
{
[self asyncDownloadAll];
}];
}
以下是它如何从主线程初始化和启动:
trip.downloader = [[MPAsyncDownloader alloc] initWithContext:trip.managedObjectContext andTrip:trip];
[self.operationQueue addOperation:self.trip.downloader];
现在我相信我正在做一切正确的基于父级的新MOC,并且多个后台线程可以同时运行而不会引起任何问题,它就在我尝试对其进行核心数据操作时主线程
result = [context executeFetchRequest:request error:&error];
崩溃发生了。感谢任何帮助!