【问题标题】:Why I am getting 'valueForUndefinedKey' error when using AnyObject in Swift?为什么在 Swift 中使用 AnyObject 时出现“valueForUndefinedKey”错误?
【发布时间】:2020-07-09 11:55:05
【问题描述】:

我有一个问题。为什么会出现以下崩溃原因?既然“名字”存在?

viewcontroller1:


struct pointDict {
    let id: Int
    let name: String
}
var pointsPlane: [pointDict] = []

let wp = pointDict(id: 123, name: "test")
pointsPlane.append(wp)

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {


if let destVC = segue.destination as? viewcontroller2 {
destVC.dt = pointsPlane[0] as AnyObject

}
}

viewcontroller2:

var dt: AnyObject?
let detail = self.dt
name.text = detail?.value(forKeyPath: "name") as? String

崩溃报告:

valueForUndefinedKey:]:这个类不符合键值编码 键名

【问题讨论】:

    标签: swift xcode anyobject


    【解决方案1】:

    AnyObject 是引用类型,但结构是值类型,因此不符合 ObjC 键值编码。

    无论如何,您的方法都是不好的做法。 swiftier 方法是用真实类型声明属性。不需要在模板中默认声明detail

    viewcontroller1:

    struct PointDict {
        let id: Int
        let name: String
    }
    var pointsPlane: [PointDict] = []
    
    let wp = PointDict(id: 123, name: "test")
    pointsPlane.append(wp)
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
        if let destVC = segue.destination as? viewcontroller2 {
            destVC.dt = pointsPlane.first
        }
    }
    

    viewcontroller2:

    var dt : PointDict? 
    
    override func viewDidLoad() {
        super.viewDidLoad()
        name.text = dt?.name ?? ""
    }
    

    【讨论】:

    • destVC.dt = pointsPlane.first >> 无法分配“ViewController1.pointDict”类型的值?输入“ViewController2.pointDict?”
    • viewcontroller1(首选)之外声明结构或声明dt var dt : ViewController1.PointDict?
    猜你喜欢
    • 2016-10-25
    • 2016-01-05
    • 1970-01-01
    • 2017-08-28
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2021-04-18
    相关资源
    最近更新 更多