我有 2 个实体:系列和季节。一个系列可以有多个季节,因此我将关系类型设置为“对很多”。 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 集,seasons.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 {
}
有什么技巧可以解决这个问题吗?
最佳答案
在每次循环中,您都会丢弃 seasons
的先前值,并将其替换为仅包含一个 season
的集合(新创建的 新赛季
):
newSeries.setValue(NSSet(object: newSeason), forKey: "seasons")
不要这样做,而是构建一组所有 newSeason
实例,然后使用该组调用 setValue:forKey:
一次。
顺便说一句,如果您创建 NSManagedObject
的子类并摆脱“键的值”业务,您的生活会更轻松。
关于Swift - 如何在循环中将条目保存到核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34187470/