2015-12-09 21 views
0

我有2个实体:Series和Season。一个系列可以有多个季节,所以我将关系类型设置为“to many”。 season_counter是一个Int数组,包含剧集的数量。Swift - 如何将条目保存到循环中的核心数据中

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

任何提示,以解决这个问题?

回答

0

在每通过你的循环,你把自己的前值seasons,并与只包含一个season一套替换它(新创建newSeason):

 newSeries.setValue(NSSet(object: newSeason), forKey: "seasons") 

而是这样做的,构建一组所有newSeason实例,然后使用该集合调用setValue:forKey:一次。

顺便说一句,如果您创建了NSManagedObject的子类别并摆脱“关键业务价值”,您的生活将会变得更加轻松。

+0

我得到了你的观点。我有这样的一个子类: 进口基金会 进口CoreData 类季节:NSManagedObject { } 的NSManaged价值观在这里:(带@) 进口基金会 进口CoreData 扩展赛季{ NSManaged var id:NSNumber? NSManaged var value:NSNumber? NSManaged var集:NSNumber? NSManaged var series:Series? } 我现在该怎么办? – IceCoala

0
newSeries.setValue(NSSet(object: newSeason), forKey: "seasons") 

这条线,你总是创建一个新的组包含exaclty一个Season对象季节 - newSeason

尝试做的是:

var prevSeasons = newSeries.valueForKey("seasons") 
prevSeasons.insert(newSeason) 
newSeries.setValue(prevSeasons, forKey: "seasons")