Swift设置或更新核心数据中的资产

时间:2016-03-25 18:24:43

标签: core-data copy mutable nsset

  • 两个实体
  • 体操运动员是一对多见面
  • 我想当我保存一个新的会面时,它被分配给每个体操运动员,然后他们可以为每个比赛得分。

也许我的逻辑完全错了,但这就是我想做的事情

让request = NSFetchRequest(entityName:" Gymnast")

    do {

        let entities = try AD.managedObjectContext.executeFetchRequest(request) as! [Gymnast]

        for item in entities {

            if let first = item.valueForKey("firstName"), last = item.valueForKey("lastName") {

                print("Name: \(first) \(last)")

                let myMeet = NSEntityDescription.insertNewObjectForEntityForName("Meet", inManagedObjectContext: AD.managedObjectContext) as! Meet

                myMeet.meetName = "Winter Classic"

                let myMeets = item.meets!.mutableCopy() as! NSMutableSet
                myMeets.addObject(myMeet)

                item.meets = myMeets.copy() as? NSSet

                AD.saveContext()

            }

        }

    } catch {

    }
}

}

1 个答案:

答案 0 :(得分:0)

我认为对每个Meet一遍又一遍地复制Gymnast对象并不理想。例如,meetName将被多次存储。我不确定这是有意的。

但是,根据您的设置,您的问题是如何分配多对多关系。对于一对多,简单地设置一对一关系总是更容易。 (请记住,核心数据模型中始终存在反向关系。)

因此,

myMeet.gymnast = item

就是你所需要的一切。

要添加和删除多对多关系,您可以使用此扩展程序:

// 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)
    }
}