macos - Swift 4 NSTreeController @objc 动态 var 节点 = [Node]() 在启动时导致应用程序崩溃

标签 macos cocoa swift4 nstreecontroller

迁移 Swift 4 后,我的 NSTreeController 项目现在在启动时崩溃。我将其归结为将 @objc 转换为我的动态数组。有谁知道为什么它总是导致崩溃?

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

最佳答案

我发现了问题所在。当我快速迁移到 4 并选择第一个选项(推荐)时,它没有将 @objc 属性附加到需要它的变量。主要是我的整个 Node 类需要变量上的 @objc 属性,第二个选项“匹配 Swift 3 行为”确实做到了这一点,并且我的桌面应用程序运行时没有任何崩溃。

下面是针对 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 行为”选项。

关于macos - Swift 4 NSTreeController @objc 动态 var 节点 = [Node]() 在启动时导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46439031/

相关文章:

ios - 无法以 .p12 格式导出 Apple 推送服务证书

swift - 菜单栏应用程序中的 OS X 键事件 (Swift)

macos - 我需要从我的 Mac 应用程序中的一张图像中删除标记的对象。无论如何,有这样做吗?

Mac 上的 r 时区警告

macos - 为 OpenCV 3.1.0 安装 ArUco 时出现问题

macos - nohup 不适用于 OS X Yosemite - 得到错误 "can' t 从控制台分离没有这样的文件或目录”

ios - 是否有可能在 iOS 中获得孟加拉语的文本到语音?

objective-c - Aaron Hillegass Cocoa Programming for Mac OS X 第 9 章问题

arrays - 如果单个元素解码失败,Swift JSONDecode 解码数组将失败

ios - 在 Swift 中创建自定义 JSON 映射器