Ios 将CoreData保存到Swift中的多个关系

Ios 将CoreData保存到Swift中的多个关系,ios,macos,core-data,swift,relationship,Ios,Macos,Core Data,Swift,Relationship,我有一对多的关系看起来是这样的 我已在文件中设置模型类以匹配: import CoreData import Foundation class Board: NSManagedObject { @NSManaged var boardColor: String @NSManaged var boardCustomBackground: AnyObject? @NSManaged var boardID: String @NSManaged var boardN

我有一对多的关系看起来是这样的

我已在文件中设置模型类以匹配:

import CoreData
import Foundation

class Board: NSManagedObject {
    @NSManaged var boardColor: String
    @NSManaged var boardCustomBackground: AnyObject?
    @NSManaged var boardID: String
    @NSManaged var boardName: String
    @NSManaged var lists: NSSet
}

class List: NSManagedObject {
    @NSManaged var listID: String
    @NSManaged var listName: String
    @NSManaged var board: Board
}
因为我要从多个JSON端点获取数据,所以我必须将列表与主板分开保存我要做的是为具有匹配boardID的板创建/更新列表

经过多次尝试,我现在的处境如下:

func saveList(boardID: String, listName: String, listID: String) {
    let request = NSFetchRequest(entityName: "Board")
    var error: NSError? = nil
    request.predicate = NSPredicate(format: "boardID like %@", boardID)
    let results: NSArray = context.executeFetchRequest(request, error: &error)
    if results.count > 0 {
        for result in results {
            let board = result as Board
            let list = NSEntityDescription.insertNewObjectForEntityForName("List", inManagedObjectContext: context) as List
            println("You should invoke 
addListObject(...)
on
board
object:

board.addListObject(list) // notice that we pass just one object
func存储列表(boardID:String,listName:String,listID:String){
let request=NSFetchRequest(entityName:“Board”)
变量错误:n错误?=nil
request.predicate=NSPredicate(格式:“boardID like%@”,boardID)
let results:NSArray=context.executeFetchRequest(请求,错误:&error)
如果results.count>0{
为了得到结果{
让board=结果为board
让list=NSEntityDescription.insertNewObjectForEntityForName(“list”,inManagedObjectContext:context)作为列表

println(“您应该在
线路板上调用
addListObject(…)
对象:

func addList(values: NSSet) {
    var items = self.mutableSetValueForKey("lists");
    for value in values {
        items.addObject(value)
    }
}

func removeList(values: NSSet) {
    var items = self.mutableSetValueForKey("lists");
    for value in values {
        items.removeObject(value)
    }
}
此外,如果您希望能够将一组列表添加到特定的
board
对象,可以使用接受对象集的方法增强
board
类扩展:

list.board = board

在一对多关系中,更容易设置对象的“到一”方向 相反的关系,在你的情况下只是

@NSManaged var lists: Set<List>
因此,这里实际上不需要扩展方法。

如果您定义:

board.lists.insert(list)

在我如何建立我的列表-董事会关系的情况下,它看起来已经是一个了?请看:@Pirijan:是的,我已经在你问题的图片中看到了。Bord->List是“对多”,List->Board是“对一”"。由于这些是彼此的反向关系,设置一个会自动更新另一个。-在这种情况下,设置列表->电路板关系更容易一些。当我尝试
List.Board=Board
时,程序失败,保存上下文时出现
错误:无法合并更改。
。冲突错误列表显示两个具有相同属性的电路板boardID,即使我在构建之前删除了db文件?@MartinR你能检查一下我的答案吗?我刚刚发现你可以这样做,它对我很有效,我认为这是一个很好的选择。@MartinR,你能告诉我,保存后你将如何获取结果吗?我的意思是一对多关系中的获取将与norm不同所有场景??嗯,似乎在
var items=self.mutableSetValueForKey(“列表”)中引发了未捕获的异常
。出现以下错误:
NSManagedObjects of entity'Board'不支持-mutableSetValueForKey:对于属性'lists'
。现在正在尝试解决这个问题。@Pirijan你有没有弄清楚为什么会出现'do not support-mutableSetValueForKey'错误?我看到了同样的情况,无法回避。我也开始了我的项目出现g“不支持-mutableSetValueForKey”错误。我是新手,所以花了一段时间才找到原因。在关系字段的“模型检查器”对话框中,有一个名为“类型”的字段。默认情况下,它读作“到一”。我选择了“到多”选项存在,错误消失。@Keenle,保存后,您能告诉我如何获取结果吗?我的意思是一对多关系中的获取与正常情况不同??保存后,您能告诉我如何获取结果吗?我的意思是一对多关系中的获取与正常情况不同??Can任何人请告诉我,我们将如何从特定boardId的列表中获取记录??保存后,您能否告诉我如何获取结果?我的意思是一对多关系中的获取将不同于正常情况??