Swift 4 NSTreeController @objc dynamic var nodes = [Node]()在启动时崩溃应用程序

时间:2017-09-27 03:31:07

标签: macos cocoa swift4 nstreecontroller

Swift 4迁移后,我的NSTreeController项目现在崩溃了。我把它归结为@objc到我的动态数组的转换。有没有人知道为什么它会导致崩溃?

@objc dynamic var nodes =[Node]() // The @objc is causing the crash

1 个答案:

答案 0 :(得分:1)

我弄明白了这个问题。当我将Swift迁移到4并选择了第一个没有将@objc属性附加到需要它的变量的选项(推荐)时。主要是我的整个Node类需要变量上的@objc属性,第二个选项“Match Swift 3 Behavior'”确实做了,我的桌面应用程序运行没有任何崩溃。

您的Node类从Swift 3到4的正确转换示例:

class Node: NSObject, TreeNode {
    @objc var name1: String
    @objc var name2: String
    @objc var name3: String?

    @objc var children: [Node] = []

    @objc init(name1: String, name2: String, name3: String) {
        self.name1 = name1
        self.name2 = name2
        self.name3 = name3
    }

    @objc func addChild(node: Node) {
       // add child function
    }

    @objc func findChild(node: Node) -> Node? {
       // find child function
    }
}

因此,对于遇到此问题的任何人,当您转换为Swift 4时,请尝试使用'匹配Swift 3行为'选项。