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

Ios 无法使用类型为(Int64,String)的参数列表调用setValue,ios,swift,core-data,Ios,Swift,Core Data,我已经检查了SO和google上的答案,我被难住了 func saveAvailableWord(word: GameWord) { let gw = NSEntityDescription.insertNewObjectForEntityForName("GameWord", inManagedObjectContext: persistence.managedObjectContext!) as! NSManagedObject let rId = wor

我已经检查了SO和google上的答案,我被难住了

    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
}
上面的代码用于核心数据,只是尝试创建一个对象。但我明白了

无法使用类型为“(Int64,forKey:String)”的参数列表调用“setValue”

在标记行上.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

不需要键值编码方法。

这正是我所需要的。我尝试了其他类型转换,但没有尝试NSNumber。只需分配值即可。谢谢!