在 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 上启动时崩溃