2016-05-02 121 views
2

我試圖通過核心數據關係將此係列實例添加到國家/地區。唯一的問題是,我的NSOrderedSet變得非常大,並且這種添加方法效率低下,因爲我必須將已經存在的整個NSOrderedSet(通過大的方式)加載到內存中。要將其複製到可編輯副本中,請添加新實例。比設置大的NSOrderedSet那個國家的新OrderdSet並保存它。 (這是我在互聯網上找到的簡單解決方案)核心數據將數據添加到Swift中的關係

是否可以在不加載與特定國家關聯的整個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 

,因爲管理的對象有代勞存取器:

currentCountry.addSeriesObject(serie) 

是否有可能做這不需要加載與特定國家相關的整個NSOrderdSet?

是的,這正是如果您使用提供的訪問器會發生什麼。順便說一句,如果你有一組對象的增加,你可以做到這一切在一次:

currentCountry.addSeries(someSetOfSeries) 
+0

我是新來的核心數據,我想用你的建議,你給你的回答結束。如何編碼?我嘗試過的所有事情都沒有奏效。 – sloeberGJ