如何观察NSManagedObject的孩子的变化?

时间:2016-06-30 19:32:19

标签: cocoa core-data swift2

Xcode 7,Swift 2,macOS应用程序

您好

我有一个名为'任务'的核心数据实体。它有一些属性,包括:

  • name(String)
  • type(String)
  • 儿童(NSSet)
  • 父级(任务)

此实体定义了两个关系:

  • '儿童' (致许多人)
  • '父' (致一个人)

我在NSOutlineView中显示任务,它们显示层次结构正常。我希望Task.type设置为'任务'如果任务没有孩子(叶子)或被设置为' Group'如果任务确实有孩子。我以为我可以在“设置器”中调用一个简单的更新方法(updateType)。如下:

internal static let childrenKey = "children"
@NSManaged private var primitiveChildren: NSSet
internal var children: NSSet {
    set{
        //print("Task.children set called.")
        if (newValue != children){
            willChangeValueForKey(Task.childrenKey)
            primitiveChildren = newValue
            didChangeValueForKey(Task.childrenKey)

            updateType()
        }
    }
    get{
        //print("Task.children get called.")
        willAccessValueForKey(Task.childrenKey)
        let value = primitiveChildren
        didAccessValueForKey(Task.childrenKey)
        return value

    }
}

然而,当我将一个孩子插入任务时,这并没有被调用。

如果它很重要,如果在单击我的添加按钮时在NSOutlineView中选择了一个任务,则在NSViewController中调用以下函数:

    internal func addTask(){

    // Get the selected Task, if a Task is selected.
    let selectedRow = self.outlineView.itemAtRow(self.outlineView.selectedRow)

    // Establish if a Task is selected.
    if ((selectedRow) != nil) {

        // A Task is selected so we insert the new Task as a child of the selected Task.
        print("Task is selected")

        treeController.addChild(Task)

    } else {

        // No Task is selected so add a new Task at the root level.
        print("No task is selected")

        treeController.insertChild(Task)
    }
}

由于

0 个答案:

没有答案