Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift Coredata插入和分派组_Swift_Core Data_Grand Central Dispatch - Fatal编程技术网

Swift Coredata插入和分派组

Swift Coredata插入和分派组,swift,core-data,grand-central-dispatch,Swift,Core Data,Grand Central Dispatch,我有一个createGroup()函数,它使用调度组确保在继续之前将新组的所有数据上载到我的远程数据库。我还想将数据的副本本地保存到用户的CoreData。然而,我对此有点陌生,不确定在哪里安全地执行实体插入 我认为最好的选择是,当一切都上传到远程数据库时,将其保存在调度组的notify回调中 var managedObjectContext: NSManagedObjectContext! func createGroup(onSccess completion:@escaping () -

我有一个
createGroup()
函数,它使用调度组确保在继续之前将新组的所有数据上载到我的远程数据库。我还想将数据的副本本地保存到用户的CoreData。然而,我对此有点陌生,不确定在哪里安全地执行实体插入

我认为最好的选择是,当一切都上传到远程数据库时,将其保存在调度组的
notify
回调中

var managedObjectContext: NSManagedObjectContext!

func createGroup(onSccess completion:@escaping () -> Void) {
    let dataDispatchGroup = DispatchGroup()
    dataDispatchGroup.enter()
    // Do asynchronous task 1
    dataDispatchGroup.enter()
    // Do asynchronous task 2

    dataDispatchGroup.notify(queue: DispatchQueue.main, execute: {
        // Do insertion here
        // NSEntityDescription.insertNewObjectForEntityForName....
        completion()
    })
}

我听说在处理线程时,需要小心保存到CoreData。我的方法是安全的还是有更好的方法?

如果没有看到实际的CoreData代码,很难说。如果没有进一步的信息,我建议使用
managedObjectContext.perform(){//do CD stuff,save context}
dispatchGroup
部分看起来不错。我只是想做正常的
NSEntityDescription。在那里插入NewObjectForentityForName
,我把它添加到我的问题中。没关系。您的核心数据发生在当前队列中。别忘了
dataDispatchGroup.leave()