ios – 无法使用类型(Int64,String)的参数列表调用setValue

我已经在SO和谷歌检查了答案,我很难过.
func saveAvailableWord(word: GameWord) {
       let gw = NSEntityDescription.insertNewObjectForEntityForName("GameWord",inManagedobjectContext: persistence.managedobjectContext!) as! NSManagedobject
       let rId = word.rowID
       gw.setValue(rId,forKey: "rowID") //*** Error line
}

上面的代码用于核心数据,只是尝试创建一个对象.但我明白了

“Cannot invoke ‘setValue’ with an argument list of type ‘(Int64,forKey: String)’

标记的行上. rowID定义为@NSManaged var rowID:Int64,因为它来自sqlite ROWID列.

如果我用简单的数字替换rId变量,则错误消失.我错过了什么?我究竟做错了什么?

感谢您的时间和帮助.

解决方法

func setValue(value: AnyObject?,forKey key: String)

期望(可选)对象作为第一个参数.与Int不同,固定
大小整数类型Int64,Int32,…不会自动桥接到
NSNumber对象,因此您必须显式调用

gw.setValue(NSNumber(longLong: rID),forKey: "rowID")

但是如果在管理对象子类中将rowId定义为Int64,
然后你可以简单地分配属性

gw.rowID = rID

无需键值编码方法.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...