我有2个实体:系列和季节。系列可以有多个季节,因此我将关系类型设置为“多”。 season_counter是一个整数数组,包含情节数量。
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
(新创建的newSeason
)的集合:
newSeries.setValue(NSSet(object: newSeason), forKey: "seasons")
不必这样做,而是建立一组所有
newSeason
实例,然后使用该组调用一次setValue:forKey:
。顺便说一句,如果您创建
NSManagedObject
的子类并摆脱“关键价值”业务,您的生活将会更加轻松。