在IOS 9及以下版本中创建nsmanagedcontext

时间:2018-08-16 09:51:05

标签: objective-c core-data nsmanagedobjectcontext

在IOS 10中,创建NSManagedObjectContext和nsmanagedObject的步骤如下:

 NSManagedObjectContext *context =   ((AppDelegate*)[[UIApplication sharedApplication] delegate]).persistentContainer.viewContext;
    NSManagedObject *object = [NSEntityDescription insertNewObjectForEntityForName:@"Leads"                                  inManagedObjectContext:context];

但是,在ios 9及更高版本中,没有presistentContainer,那么如何在IOS 9中创建NSManagedObjectContext?我尝试了以下操作,但没有成功,返回nil:

- (NSManagedObjectContext *)managedObjectContext {
    // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (!coordinator) {
        return nil;
    }
    _managedObjectContext = [[NSManagedObjectContext alloc] init];
    [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    return _managedObjectContext;
}

1 个答案:

答案 0 :(得分:0)

在iOS 9中,NSManagedObjectContext的实例化已更改为指定此对象的并发类型。

这意味着我们现在必须选择初始化托管对象上下文的线程:主队列,或者可能是我们创建的特殊后台队列。我们的选择是:

  • NSPrivateQueueConcurrencyType
  • NSMainQueueConcurrencyType

因此,以下内容:

_managedObjectContext = [[NSManagedObjectContext alloc] init];

应成为:

_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

ref:https://developer.apple.com/documentation/coredata/nsmanagedobjectcontext#//apple_ref/c/tdef/NSManagedObjectContextConcurrencyType