ios - 在 Swift 中保存 CoreData 对多关系

标签 ios macos core-data swift relationship

我有一个看起来像这样的一对多关系,

coredata model

我已经在一个文件中设置了我的模型类来匹配:

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("💃 want to save \(listName) in \(board.boardName)")
            board.lists.addListObject(lists)
            list.listName = listName
            list.listID = listID
        }
    }
}

基于 Defining CoreData Relationships in Swiftthis ,我尝试实现@Keenle 对板内定义列表对象的回答:

import Foundation

extension Board {
    func addListObject(value:List) {
        var items = self.mutableSetValueForKey("lists");
        items.addObject(value)
    }

    func removeListObject(value:List) {
        var items = self.mutableSetValueForKey("lists");
        items.removeObject(value)
    }
}

但是,我在 board.lists.addListObject(lists) 处遇到了以下错误: “NSSet”没有名为“addListObject”的成员

我还尝试了 board.lists.listName = listName,而不是 board.lists.addListObject(lists) Obj-C example ,但遗憾的是,这也没有用。

(此外,println 输出正确指定了正确的板和列表。)

提前致谢!

最佳答案

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

list.board = board

因此这里实际上不需要扩展方法。

关于ios - 在 Swift 中保存 CoreData 对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25127090/

相关文章:

iphone - 从核心数据存储中选择随机条目

objective-c - 将 JSON 反序列化为嵌套核心数据实体时出现 iPhone 核心数据 "Failed to call designated initializer on NSManagedObject class"错误

ios - 使导航栏显示所需的标题

ios - 如何符号化Xcode崩溃日志?

swift - 如何禁用 NSTextView 的用户交互?

macos - 删除了 golang 但 go 命令仍然有效?

objective-c - 将 nsarraycontroller 绑定(bind)到 nsobjectcontroller、选择、内容的编程等效项

ios - 自定义单元格未显示在 TableView -Xcode 中

iphone - UIDocumentsInteractionController 显示 iBooks 但不打开它

c# - 命名空间 'System.Management' 中不存在“ManagementClass”