(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) 类型的未捕获异常终止)

核心数据:父/子托管对象上下文是不是适合更新一组多个对象?

托管对象上下文不会保存——没有错误

在主线程中非法访问托管对象上下文,为啥?

由于某种原因,托管对象上下文在 iOS 中为零

如何创建/管理多个托管对象上下文?