无法使用类型 (Int64, String) 的参数列表调用 setValue
Posted
技术标签:
【中文标题】无法使用类型 (Int64, String) 的参数列表调用 setValue【英文标题】:Cannot invoke setValue with an argument list of type (Int64, String) 【发布时间】:2015-09-07 11:18:43 【问题描述】:我已经在 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 变量,错误就会消失。我错过了什么?我究竟做错了什么?
感谢您的时间和帮助。
【问题讨论】:
【参考方案1】:func setValue(value: AnyObject?, forKey key: String)
期望一个(可选的)对象作为第一个参数。与Int
不同,固定
大小整数类型Int64
、Int32
、...不会自动桥接到
NSNumber
对象,所以你必须显式调用
gw.setValue(NSNumber(longLong: rID), forKey: "rowID")
但是如果在托管对象子类中rowId
被定义为Int64
,
那么你可以简单地用
gw.rowID = rID
无需键值编码方法。
【讨论】:
这正是我所需要的。我尝试过其他演员阵容,但没有尝试过 NSNumber。简单地分配值是要走的路。谢谢!以上是关于无法使用类型 (Int64, String) 的参数列表调用 setValue的主要内容,如果未能解决你的问题,请参考以下文章
Go语言string,int,int64 ,float之间类型转换方法
无法转换类型“[String : AnyObject]?”的值到预期的参数类型“[NSAttributedStringKey:Any]?”