【发布时间】:2016-06-28 11:22:50
【问题描述】:
对于 coredata 中的并发,我使用父子 MOC 概念,其中父上下文为NSMainQueueConcurrencyType,子上下文为NSPrivateQueueConcurrencyType,下面是代码
- (NSManagedObjectContext *)managedObjectContext
{
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];// DONE to avoid crash when the app auto logs out
managedObjectContext.persistentStoreCoordinator = coordinator;
}
return managedObjectContext;
}
-(NSManagedObjectContext *)getPrivateMOC
{
NSManagedObjectContext *private = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[private setParentContext:[self managedObjectContext]];
return private;
}
-(void)storeCustomerData:(NSArray *)custData
{
NSManagedObjectContext *currentbgContext = [self getPrivateMOC];
[currentbgContext performBlock:^{
for (NSDictionary *jsonObject in custData) {
CustomerEntity *custEntity = [NSEntityDescription insertNewObjectForEntityForName:@"CustomerEntity" inManagedObjectContext:currentbgContext];
custEntity.fname = [jsonObject field:@"fname"];
custEntity.lname = [jsonObject field:@"lname"];
}
NSError *error = nil;
if (![currentbgContext save:&error]) {
NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
//abort();
}
}];
}
如果我在方法 storeCustomerData 中使用父上下文,它可以工作,但使用子上下文 getPrivateMOC() 则不行。
如果我遗漏了什么,请告诉我
【问题讨论】:
标签: ios core-data concurrency