(SWIFT 3) 创建父子托管对象上下文
Posted
技术标签:
【中文标题】(SWIFT 3) 创建父子托管对象上下文【英文标题】:(SWIFT 3) create parent child managed object context 【发布时间】:2016-10-01 16:28:37 【问题描述】:我有一个在主队列上运行的聊天应用程序,我想通过创建父子托管对象上下文来提高性能,其中父对象在主队列中,子对象在私有队列中。因为当我一次发送大量消息时,UI 会变慢一点!
我遇到的问题是我自动生成了我的 coredata 堆栈。而且我什至不知道如何访问我的托管对象上下文。有人可以给我一些关于如何开始的建议。
lazy var persistentContainer: NSPersistentContainer =
let container = NSPersistentContainer(name: "Reveal_Swift_3")
container.loadPersistentStores(completionHandler: (storeDescription, error) in
if let error = error as NSError?
fatalError("Unresolved error \(error), \(error.userInfo)")
)
return container
()
// MARK: - Core Data Saving support
func saveContext ()
let context = persistentContainer.viewContext
if context.hasChanges
do
try context.save()
catch
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
【问题讨论】:
【参考方案1】:将persistentContainer.viewContext
用于您的 UI 内容,将persistentContainer.performBackgroundTask(block:)
用于后台任务。
【讨论】:
【参考方案2】:用途:
persistentContainer.newBackgroundContext()
代替:
persistentContainer.viewContext()
newBackgroundContext() 创建私有托管上下文。
这是创建上下文的方法:
var privateUserContext : NSManagedObjectContext
get
return userPersistentContainer.newBackgroundContext()
而且每次使用都可以这样保存。
do
try privateUserMOC.save()
catch
print("Error")
这对我有用....祝你好运!
【讨论】:
以上是关于(SWIFT 3) 创建父子托管对象上下文的主要内容,如果未能解决你的问题,请参考以下文章
(Swift 3) 父子上下文崩溃核心数据 (libc++abi.dylib: 以 NSException (Recorded Frame) 类型的未捕获异常终止)