Swift 4 NSTreeController @objc dynamic var nodes = [Node]() 在启动时崩溃应用程序
Swift 4 NSTreeController @objc dynamic var nodes = [Node]() crashes app on start
Swift 4 迁移后,我的 NSTreeController 项目现在在启动时崩溃。我将其归结为将 @objc 转换为我的动态数组。有谁知道为什么它一直导致崩溃?
@objc dynamic var nodes =[Node]() // The @objc is causing the crash
我找到问题了。当我将 Swift 迁移到 4 并选择第一个选项(推荐)时,它没有将 @objc 属性 附加到需要它的变量。主要是我的整个节点 class 在变量上需要 @objc 属性,第二个选项 'Match Swift 3 Behavior' 确实做到了,我的桌面应用程序 运行 没有任何崩溃。
下面为您的节点 class 从 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 时,请尝试使用 'Match Swift 3 Behavior' 选项。
Swift 4 迁移后,我的 NSTreeController 项目现在在启动时崩溃。我将其归结为将 @objc 转换为我的动态数组。有谁知道为什么它一直导致崩溃?
@objc dynamic var nodes =[Node]() // The @objc is causing the crash
我找到问题了。当我将 Swift 迁移到 4 并选择第一个选项(推荐)时,它没有将 @objc 属性 附加到需要它的变量。主要是我的整个节点 class 在变量上需要 @objc 属性,第二个选项 'Match Swift 3 Behavior' 确实做到了,我的桌面应用程序 运行 没有任何崩溃。
下面为您的节点 class 从 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 时,请尝试使用 'Match Swift 3 Behavior' 选项。