(SWIFT 3)创建父子管理对象上下文

时间:2016-10-01 16:28:37

标签: ios swift core-data swift3 nsmanagedobjectcontext

我有一个可在主队列上运行的聊天应用程序,我想通过创建父和子托管对象上下文来提高性能,其中父对象位于主队列中且子进程位于专用队列上。因为当我一次发送大量消息时,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)")
        }
    }
}

2 个答案:

答案 0 :(得分:0)

使用persistentContainer.viewContext作为UI内容,persistentContainer.performBackgroundTask(block:)作为后台任务。

答案 1 :(得分:0)

使用:

                 persistentContainer.newBackgroundContext() 

而不是:

                  persistentContainer.viewContext()

newBackgroundContext()创建一个私有托管上下文。

这是您创建上下文的方法:

    var privateUserContext : NSManagedObjectContext {
        get {
            return userPersistentContainer.newBackgroundContext()
        }
    }

每次使用它都可以这样保存。

                    do{
                         try privateUserMOC.save()

                    }
                    catch{
                         print("Error")
                    }

这对我来说......祝你好运!