问题理解核心数据基础

Posted

技术标签:

【中文标题】问题理解核心数据基础【英文标题】:Issue understanding Core Data fundamentals 【发布时间】:2016-06-28 17:35:21 【问题描述】:

我正在创建一个 NSManagedObject 数组,用作我的 UITableView DataSource,如下所示:

let entity = NSEntityDescription.entityForName("YoutubeAsset", inManagedObjectContext: self.managedContext)!
let asset = YoutubeAsset(entity: entity, insertIntoManagedObjectContext: self.managedContext)
asset.videoId = code
myDataSource.append(asset)

然后,当用户选择其中一个单元格时,我想将特定对象保存到我的核心数据实体中。

问题是当我打电话时

 do 
        try managedContext.save()
         catch let error as NSError  
            print("Could not save \(error), \(error.userInfo)")
        

它将我的DataSource全部保存到 Core Data 中。

我怎样才能从我的managedContext 中仅“拉”出选定的对象,并将其保存到 Core Data 中? 非常感谢,Roi!

【问题讨论】:

你想完成什么?您是否在 DataSource 中有不想保存的未保存更改(新资产除外)? 【参考方案1】:

如果managedContext 在代码示例的开头没有未保存的对象,则在末尾保存上下文将导致单个 SQL 插入。

您不能保存单个实体,只能保存上下文(保存上下文中未保存的所有实体)。

如果您想进行一些更改并且不保存它们,那么您应该在不同的上下文中进行这些更改。

【讨论】:

在这里评论它自己的问题 - 是的,在同一个上下文中有一堆实体,我正在尝试保存一个特定的实体。为每个“单个新”对象创建新上下文是常规做法吗?还是我应该打破包含所有“对象”的主要上下文,而不是应用保存操作? 正常:在一个上下文中进行更改并保存,除非您有充分的理由不这样做。您可以在创建每个对象后调用 save 并继续使用相同的上下文。 是否可以在我的 Context 已经包含一堆对象但我只想保存第一个对象的场景中附加一些示例代码? 我说:“你不能保存单个实体,只能保存上下文”,并且上下文保存所有未保存的实体——因此示例代码是不可能的。 (是的,你可能会破解一些东西,但这不是 CoreData 的用途)。如果您想隔离实体并让它们分别保存,它们需要位于不同的上下文中。 啊!大声笑 - 我的坏,有点失焦。好的,所以我需要为我要保存的每个新实体生成新的上下文。创建新的上下文是否算作昂贵的过程?同样,我是在创建新的上下文并通过应用委托的属性对其进行初始化,还是赋予它新的新值?

以上是关于问题理解核心数据基础的主要内容,如果未能解决你的问题,请参考以下文章

《python机器学习—预测分析核心算法》:理解数据

深入理解 Java 多线程核心知识:跳槽面试必备

深入理解 Java 多线程核心知识:跳槽面试必备

hadoop核心基础架构学习分享

MobX基础理解

理解核心数据 Swift