Mar*_*rte 9 xcode ios xcode-storyboard swift
我遇到了问题,我在网上找不到其他人同样的斗争,也许这太傻了.
我有以下课程:
class UIXOColourPicker : UIView {
@IBInspectable var moodValue: Int!
...
}
Run Code Online (Sandbox Code Playgroud)
在我的故事板中,我有一个像这样的观点:

用户定义的运行时属性是由Xcode IBInspectable功能生成的(这真的很酷btw),但每当我尝试运行应用程序时,我都会收到错误
*** 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开发人员来看看它.
干杯
Mik*_*e S 14
@IBInspectable使用cocoa对象而不是本机swift类型.因此,任何不可隐式转换为swift类型的东西都需要成为可可对象.为了Number或Bool你需要NSNumber.这样的事情Point,Size,Rect,等等,你需要使用NSValue.但是,String你可以String直接使用; 你不需要使用NSString.
因此,在您的情况下,您需要使用NSNumber而不是Int.我也会使用NSNumber?而NSNumber!不是在storyboard/xib中没有设置值.
@IBInspectable var moodValue: NSNumber?
Run Code Online (Sandbox Code Playgroud)
正如@JakeLin和@Echelon指出的那样,对于int相似的值,Xcode只会在Attributes Inspector中显示属性,如果你将其声明为Int?,但它会在运行时崩溃.如果使用a NSNumber?,它将不会在运行时崩溃,但该属性将不再在Attributes Inspector中可用; 它只会显示在用户定义的运行时属性中(这对我来说似乎是Xcode中的一个错误).
错误本身告诉我们如何解决这个问题:
IBInspectable [66994:58722469]无法设置(moodValue)用户定义的检查属性(q25429792 ___ IBInspectable.ViewController):[setValue:forUndefinedKey:]:此类不是键值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
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您确实希望属性显示在Attributes Inspector中,并且您不介意添加额外的方法,请将您的属性声明为Int?和实现setValue:forUndefinedKey:.如果您不想要额外的方法,则必须满足于使用NSNumber?和用户定义的运行时属性UI.
这取决于您的类型moodValue.似乎KVO系统无法处理所需的类型强制; 它正在寻找moodValue具有实际类型的a NSNumber.更改
@IBInspectable var moodValue: Int!
Run Code Online (Sandbox Code Playgroud)
至
@IBInspectable var moodValue: NSNumber!
Run Code Online (Sandbox Code Playgroud)
然后挑出moodValue.integerValue应该做你想要的.
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |