Core Data 在 Swift 中将数据添加到关系中
Posted
技术标签:
【中文标题】Core Data 在 Swift 中将数据添加到关系中【英文标题】:Core Data adding data to relationship in Swift 【发布时间】:2016-05-02 11:13:11 【问题描述】:我正在尝试通过核心数据关系将此系列实例添加到一个国家/地区。唯一的问题是我的 NSOrderedSet 变得非常大,并且这种添加方法效率低下,因为我必须将已经存在的整个 NSOrderedSet 加载到内存中(变得很大)。将其复制到可编辑的副本中,然后添加新实例。比为那个国家设置大的 NSOrderedSet 新的 OrderdSet 并保存它。 (顺便说一下,这是我在网上找到的一个简单的解决方案)
是否可以在不加载与该特定国家/地区关联的整个 NSOrderdSet 的情况下执行此操作?所以只添加新实例而不加载完整列表?
对于我含糊的解释,我深表歉意。我是 Core-Data 概念的新手。
for data in rawData
//Setup let
let seriesName = data.1.array![1].string!
if let seriesID = Int(data.1.array![0].string!)
if let itemCount = Int(data.1.array![2].string!)
privateMOC.performBlockAndWait
let serie = NSEntityDescription.insertNewObjectForEntityForName("Series", inManagedObjectContext: privateMOC) as! Series
serie.seriesID = seriesID
serie.seriesName = seriesName
serie.itemCount = itemCount
let series = currentCountry.series!.mutableCopy() as! NSMutableOrderedSet
series.addObject(serie)
currentCountry.series = series.copy() as? NSOrderedSet
do
try privateMOC.save()
catch let error as NSError
print("Could not save \(error), \(error.userInfo)")
【问题讨论】:
【参考方案1】:您无需执行以下任何操作:
let series = currentCountry.series!.mutableCopy() as! NSMutableOrderedSet
series.addObject(serie)
currentCountry.series = series.copy() as? NSOrderedSet
因为托管对象具有为您执行此操作的 mutator:
currentCountry.addSeriesObject(serie)
是否可以在不加载与该特定国家/地区关联的整个 NSOrderdSet 的情况下执行此操作?
是的,如果您使用提供的访问器,就会发生这种情况。顺便说一句,如果你有一组对象要添加,你可以一次完成:
currentCountry.addSeries(someSetOfSeries)
【讨论】:
我是 Core Data 的新手,我想使用您在答案末尾给出的建议。如何编码?我尝试的所有方法都不起作用。以上是关于Core Data 在 Swift 中将数据添加到关系中的主要内容,如果未能解决你的问题,请参考以下文章
IOS - 如何在 Core Data Swift 中将数据插入到具有关系的不同表中
如何在 Swift 中将字符串数组保存到 Core Data
如何在 Swift 中将 Core Data 与 Cloudkit 和许多设备同步
Swift & Core Data - 将实体添加到现有实体