我有2个实体:系列和季节。一个系列可以有多个季节,所以我将关系类型设置为“to many”。 season_counter是一个Int数组,包含剧集数量。
let newSeries = NSEntityDescription.insertNewObjectForEntityForName("Series", inManagedObjectContext: self.context!) as! Series
for var i = 0; i < season_counter.count; ++i{
let newSeason = NSEntityDescription.insertNewObjectForEntityForName("Season", inManagedObjectContext: self.context!) as! Season
newSeason.value = i+1
newSeason.episodes = season_counter[i]
newSeries.setValue(NSSet(object: newSeason), forKey: "seasons")
do {
try context?.save()
} catch _ {
}
}
我注意到调试时,season_counter存储了正确的值。当我显示结果时,我只存储了最后一季(例如13集,season.count为1):
do {
let fetchRequest = NSFetchRequest(entityName: "Season")
fetchRequest.predicate = NSPredicate(format: "series = %@", series)
try seasons = context?.executeFetchRequest(fetchRequest) as! [Season]
print(seasons.count)
print(seasons[0].episodes)
} catch {
}
解决此问题的任何提示?
答案 0 :(得分:0)
在每次循环中,您都会丢弃之前的seasons
值并将其替换为仅包含一个season
的集合(新创建的newSeason
):
newSeries.setValue(NSSet(object: newSeason), forKey: "seasons")
而不是这样做,而是构建一组所有newSeason
个实例,然后使用该集合调用setValue:forKey:
一次。
顺便说一句,如果你创建NSManagedObject
的子类并且没有键#34的值,你的生活会更容易。业务。
答案 1 :(得分:0)
newSeries.setValue(NSSet(object: newSeason), forKey: "seasons")
使用此行,您始终会创建一组新的季节,其中包含一个Season
个对象 - newSeason
。
尝试这样做:
var prevSeasons = newSeries.valueForKey("seasons")
prevSeasons.insert(newSeason)
newSeries.setValue(prevSeasons, forKey: "seasons")