Основные данные, добавляющие данные в отношения в Swift
Я пытаюсь добавить этот экземпляр серии в страну через отношение основных данных. Единственная проблема состоит в том, что мой 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
потому что у управляемых объектов есть мутаторы, которые делают это за вас:
currentCountry.addSeriesObject(serie)
Можно ли сделать это без загрузки всего набора NSOrderdSet, связанного с этой конкретной страной?
Да, это именно то, что произойдет, если вы используете предоставленный метод доступа. Кстати, если у вас есть набор объектов для добавления, вы можете сделать все сразу:
currentCountry.addSeries(someSetOfSeries)