swift - 填充核心数据多对多关系

标签 swift core-data

我有一个 Worker 和 Event 实体。我在为事件创建新工作人员时遇到问题,工作人员实体有相应的事件,但事件实体没有保存工作人员。(设置反向选项时,这不应该自动发生吗)

   class Event: NSManagedObject {

    @NSManaged var id: NSNumber
    @NSManaged var name: String
    @NSManaged var startTime: String
    @NSManaged var endTime: String
    @NSManaged var workers: NSMutableSet

    func addWorker(name: String, startTime: String, endTime: String) {
        let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        let managedContext = appDelegate.managedObjectContext!

        var worker: Worker = NSEntityDescription.insertNewObjectForEntityForName("Worker", inManagedObjectContext: managedContext) as! Worker

        worker.name = name
        worker.startTime = startTime
        worker.endTime = endTime
        worker.id = Worker.getNewWorkerId()
        worker.events.addObject(self)

        var error: NSError?

        if !managedContext.save(&error) {
            println("Could not save \(error), \(error?.userInfo)")
        }
    }

}

最佳答案

您还必须在关系的两端将关系定义为“对多”。要这样定义关系,请选择相关关系,然后在右 Pane 中将“类型”设置为“对多”。

此外,NSManagedObject 子类中的多对多属性应该是 NSSet 和 NSOrderedSet 类型,而不是 NSMutableSet。请参阅此处的文档:Managed Object Accessor Methods .

enter image description here

如果您想添加有关关系的任何其他信息,则需要“关联”或“加入”实体。 ( CoreData Many-To-Many Relationships )

关于swift - 填充核心数据多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967766/

相关文章:

ios - SpriteKit 中的 SKVideoNode 问题,模拟器只显示灰屏

Swift EXC_BAD_ACCESS 具有在协议(protocol)扩展中定义的默认实现

core-data - 如果对象属性发生变化,如何重新加载一行 SwiftUI Core Data-backed list?

ios - 使用核心数据和 swift 获取错误 "unrecognized selector sent to instance"

iphone - 如何为一个属性添加多个实体(iOS,核心数据)?

ios - 将数据从自定义 UITableViewCell 发送到详细信息 ViewController - Swift

ios - 在 Swift 中获取光标前的字符

ios - 如何在一行内垂直对齐两个 UILabel?

ios - Swift - 存储和检索数据

ios - 核心数据 - 重新加载 TableVIew