删除不同上下文中的对象

时间:2017-04-06 07:09:34

标签: ios swift core-data concurrency thread-safety

我在我的应用程序中订阅和取消订阅存在问题,用户在单击订阅时将发送服务器调用并从服务器下载数据并存储在db中。同时,如果用户点击取消订阅按钮,我必须删除db中的相同数据。我在尝试从不同的上下文中访问对象时遇到错误。

我想知道在并发中是否有办法可以在私有上下文中删除对象[取消订阅过程],然后在订阅过程完成后保存更改。

我无法以这种方式删除对象,有人可以告诉我哪里出错了吗?

    func deleteStreamEntityInPrivateContext(_ id: Int){
    privateContext = NSManagedObjectContext(concurrencyType: .privateQueueConcurrencyType)
    privateContext?.parent = CoreDataService.sharedInstance.managedObjectContext

    privateContext?.perform {
        if let stream = self.getStreamEntity(id){
            let managedObjectContext = CoreDataService.sharedInstance.managedObjectContext
            let streamID = managedObjectContext.object(with: stream.objectID)
            debugPrint(streamID, stream.id)
            self.privateContext?.delete((self.privateContext?.object(with: stream.objectID))!)
        }
    }

}

func saveStreamEntityInPrivateContext(){
    if let privateContext = privateContext{
        if privateContext.hasChanges{
            do{
                try privateContext.save()
                if CoreDataService.sharedInstance.managedObjectContext.hasChanges{
                    CoreDataService.sharedInstance.saveContext()
                }
            }catch{
                let nserror = error as NSError
                NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
            }
        }
    }
}

0 个答案:

没有答案