标签: nskeyvaluecoding

在Int上使用setValue(value,forKey:key)?类型触发非键值编码兼容方法

setValue(value, forKey: key)在我的NSKeyValueCoding兼容的Swift NSObject子类中成功使用了该方法.

这在String选项上非常有效,例如

var name:String?
Run Code Online (Sandbox Code Playgroud)

但是,在Int选项上,它会失败,触发我为了调试目的而重写的未定义键方法:

override func setValue(value: AnyObject!, forUndefinedKey key: String!) {
    println("\(self) this class is not key value coding-compliant for the key \(key)")
}
Run Code Online (Sandbox Code Playgroud)

因此,例如,myId具有良好整数值的键将触发上面的未定义键方法.

var myId:Int?
Run Code Online (Sandbox Code Playgroud)

如果我将上面的定义更改为非可选,那么一切正常:

var myId:Int = 0
Run Code Online (Sandbox Code Playgroud)

随着myId作为一个可选的,我已经试过绝对一切,我可以在铸造,展开,初始化等方式想到的.它只是没有将类视为符合这些数值的键值.

我知道这是一个很好的数值.将var声明更改为String?崩溃.它在lldb看起来也很好:

Printing description of key:
myId
key NSObject    0x00007fb8d530ca20  0x00007fb8d530ca20
k   NSString    "myId"  0x00007fa2aa942f20
value   __NSCFNumber *  Int64(4348129)  0xb000000004258e13
Printing description of value:
4348129
(lldb) 
Run Code Online (Sandbox Code Playgroud)

所以,问题是,有没有人在Swift中使用过 - setValue(value, forKey: key) Int类型的NSKeyValueCoding方法成功了吗?

key-value-coding nsnumber swift nskeyvaluecoding

25
推荐指数
1
解决办法
5946
查看次数