在 IOS 9 及更低版本中创建 nsmanagedcontext

Posted

技术标签:

【中文标题】在 IOS 9 及更低版本中创建 nsmanagedcontext【英文标题】:creating a nsmanagedcontext in IOS 9 and below 【发布时间】:2018-08-16 09:51:05 【问题描述】:

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;

【问题讨论】:

github.com/mattneub/Programming-iOS-Book-Examples/blob/master/… 【参考方案1】:

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

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

NSPrivateQueueConcurrencyType NSMainQueueConcurrencyType

所以如下:

_managedObjectContext = [[NSManagedObjectContext alloc] init];

应该变成:

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

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

【讨论】:

以上是关于在 IOS 9 及更低版本中创建 nsmanagedcontext的主要内容,如果未能解决你的问题,请参考以下文章

Internet Explorer 8 及更低版本的 SVG 支持

“使用 Apple 登录”是不是允许应用向后兼容 iOS 12 及更低版本?

iOS5 情节提要错误:情节提要在 iOS 4.3 及更低版本上不可用

iOS 应用在适用于 iOS 14 及更低版本但不是 iOS 15+ 的 Testflight 上启动时崩溃

UIRefreshControl 有条件地为 ios 5 及更低版本声明

如何在 iOS 14+ 及更低版本上将文件选择器添加到应用程序