gpt4 book ai didi

ios - Swift - 奇怪的编码兼容错误

转载 作者:IT王子 更新时间:2023-10-29 05:40:30 25 4
gpt4 key购买 nike

我遇到了一个问题,我在网上找不到其他人遇到同样的问题,也许这太愚蠢了。

我有以下类(class):

class UIXOColourPicker : UIView {
@IBInspectable var moodValue: Int!
...
}

在我的 Storyboard中,我有这样一个 View :

enter image description here

用户定义的运行时属性是由 Xcode IBInspectable 功能生成的(顺便说一句,这真的很酷),但是每当我尝试运行该应用程序时,我都会收到错误

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIXOColourPicker 0x7fa86877c420> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key moodValue.'

我正在使用 Xcode 6 - Beta 6。

有什么想法吗?

很抱歉,如果这是一个愚蠢的问题,但我已经为它苦苦挣扎了大约 2 个小时,而且我这里没有任何其他 Swift 开发人员可以查看它。

干杯

最佳答案

@IBInspectable 使用 cocoa 对象而不是原生的 swift 类型。因此,任何不能隐式转换为 swift 类型的东西都需要是 cocoa 对象。对于 NumberBool,您需要 NSNumber。对于 PointSizeRect 等,您需要使用 NSValue。但是,对于 String 可以直接使用 String;你不需要使用 NSString

因此,在您的情况下,您需要使用 NSNumber 而不是 Int。我还会使用 NSNumber? 而不是 NSNumber! 以防未在 Storyboard/xib 中设置该值。

@IBInspectable var moodValue: NSNumber?

更新

正如@JakeLin 和@Echelon 所指出的,对于像 int 这样的值,如果您将其声明为 Int?,Xcode 只会在属性检查器中显示该属性,但它会在运行时崩溃。如果您使用 NSNumber?,它不会在运行时崩溃,但该属性将不再在 Attributes Inspector 中可用;它只会出现在用户定义的运行时属性中(对我来说这似乎是 Xcode 中的一个错误)。

错误本身告诉我们如何解决该问题:

IBInspectable[66994:58722469] Failed to set (moodValue) user defined inspected property on (q25429792___IBInspectable.ViewController): [ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key moodValue.

这意味着运行时无法在类上为 moodValue 找到“键值编码兼容”属性(Int 属性不是键值编码兼容),并且您可以实现 setValue:forUndefinedKey: 来解决这个问题。

在那种情况下,实现可能看起来像这样:

@IBInspectable var moodValue: Int?

override func setValue(value: AnyObject?, forUndefinedKey key: String) {
if let value = value as? Int? where key == "moodValue" {
self.moodValue = value
}
}

因此,如果您真的希望属性显示在属性检查器中并且您不介意添加额外的方法,请将您的属性声明为 Int? 并实现 setValue: forUndefinedKey:。如果您不想要额外的方法,您将不得不满足于使用 NSNumber? 和用户定义的运行时属性 UI。

关于ios - Swift - 奇怪的编码兼容错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25429792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com