Swift - 如何在循环中将条目保存到核心数据

时间:2015-12-09 19:32:50

标签: swift core-data

我有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 {
}

解决此问题的任何提示?

2 个答案:

答案 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")