我有一个核心数据关系,其中一个实体拥有另一个实体。据我所知,许多类的每个实例都保存在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值。时隙是我要添加的许多对象。
我在最后一行收到错误,错误是:“无法使用类型为Array的列表的参数调用Set <_>类型的初始化程序”
我在概念上根本不对吗?谢谢!
对于一对多来说,这很容易。只需使用反向一对一关系即可。
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")
您已将timeSlotItems
和saveTimeSlot:
都声明为静态,所以我不确定您的意图是什么。我怀疑这不是您所需要的。
与Core Data自动运行时为属性生成优化的访问器的方式相同,它也为关系生成访问器。
[您没有说多对多关系的“一侧”的名称是什么,但是如果我假设它类似于Schedule
,其中Schedule
与TimeSlot
有多对多关系称为timeSlotItems
,然后Core Data将为您运行时生成以下访问器:
class Schedule: NSManagedObject {
@NSManaged public var timeSlotItems: Set<TimeSlot>
@NSManaged public func addTimeSlotItemsObject(value: TimeSlot)
@NSManaged public func removeTimeSlotItemsObject(value: TimeSlot)
@NSManaged public func addTimeSlotItems(values: Set<TimeSlot>)
@NSManaged public func removeTimeSlotItems(values: Set<TimeSlot>)
}
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 )