在主线程上的executeFetchRequest期间枚举时,集合发生了变异

时间:2014-07-24 19:28:21

标签: ios objective-c core-data concurrency

在这个问题上花了几个小时,我只能在后台线程上使用核心数据而不是在主线程上找到解决方案。

在我的设置中,我通过自定义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];

崩溃发生了。感谢任何帮助!

0 个答案:

没有答案