我有一个核心数据关系,其中一个实体拥有许多另一个实体。据我所知,许多类的每个实例都保存在NSSet中?在一个班级里面。 (?)
我的问题是 - 在此套装中添加商品的最佳方式是什么?我认为这一定是一个非常普遍的问题 - 但我似乎找不到一个简单的方法。
这是我的尝试:(这一切都来自一个班级)
static var timeSlotItems: NSSet? //The Set that holds the many?
...
static func saveTimeSlot(timeSlot: TimeSlot) { //TimeSlot is the many object
retrieveValues()
var timeSlotArray = Array(self.timeSlotItems!)
timeSlotArray.append(timeSlot)
var setTimeSlotItems = Set(timeSlotArray)
self.timeSlotItems = setTimeSlotItems // This is the error line
}
其中retrieveValues()只更新类中的所有coreData值。 TimeSlot是我要添加的许多对象。
我在最后一行收到错误,错误是:“无法使用类型为Array的列表参数调用类型Set< _>的初始值设定项”
我在概念上是错的吗?谢谢!
答案 0 :(得分:5)
对于一对多,这很容易。只需使用反向一对一的关系。
timeSlot.item = self
对于多对多,我使用这种方便的方法:
// Support adding to many-to-many relationships
extension NSManagedObject {
func addObject(value: NSManagedObject, forKey key: String) {
let items = self.mutableSetValueForKey(key)
items.addObject(value)
}
func removeObject(value: NSManagedObject, forKey key: String) {
let items = self.mutableSetValueForKey(key)
items.removeObject(value)
}
}
使用如下:
self.addObject(slot, forKey:"timeSlotItems")
答案 1 :(得分:5)
您已将timeSlotItems
和saveTimeSlot:
声明为静态,因此我不确定您的意图是什么。我怀疑这不是你需要的。
与Core Data自动为运行时生成属性的优化访问器的方式相同,它也为关系生成访问器。
你没有说出to-many关系的“一”方面的名称是什么,但如果我认为它类似于Schedule
,那么Schedule
具有多对多关系与名为TimeSlot
的{{1}}的关系,然后Core Data将为您运行时生成以下访问者:
timeSlotItems
答案 2 :(得分:2)
对于名为“ Reply”的多个商品,CoreData知道要添加呼叫“ addToReplys”。
因此...
p = one Post. your core data Post items have many core data Reply items.
for jr in yourJson {
r = convert jr to a core data Reply
p.addToReplys( r )
就这样
p.addToReplys( r )