核心数据将数据添加到Swift中的关系

时间:2016-05-02 11:13:12

标签: swift core-data nsorderedset nsmutableorderedset

我试图通过核心数据关系将这个系列实例添加到一个国家/地区。唯一的问题是我的NSOrderedSet变得非常大,这种添加方法效率低下,因为我必须将已经存在的整个NSOrderedSet(通向big的方式)加载到内存中。然后将其复制到可编辑的副本中,添加新实例。比将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 个答案:

答案 0 :(得分:1)

您无需执行任何操作:

let series = currentCountry.series!.mutableCopy() as! NSMutableOrderedSet
series.addObject(serie)
currentCountry.series = series.copy() as? NSOrderedSet

因为托管对象具有为您执行此操作的mutators:

currentCountry.addSeriesObject(serie)
  

是否可以在不加载与特定国家/地区相关联的整个NSOrderdSet的情况下执行此操作?

是的,如果您使用提供的访问者,那将会发生什么。顺便说一句,如果你有一组要添加的对象,你可以一次完成所有这些:

currentCountry.addSeries(someSetOfSeries)