【问题标题】:Cannot invoke setValue with an argument list of type (Int64, String)无法使用类型 (Int64, String) 的参数列表调用 setValue
【发布时间】: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 变量,错误就会消失。我错过了什么?我究竟做错了什么?

感谢您的时间和帮助。

【问题讨论】:

    标签: ios swift core-data


    【解决方案1】:
    func setValue(value: AnyObject?, forKey key: String)
    

    期望一个(可选的)对象作为第一个参数。与Int 不同,固定 大小整数类型Int64Int32、...不会自动桥接到 NSNumber 对象,所以你必须显式调用

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

    但是如果在托管对象子类中rowId被定义为Int64, 那么你可以简单地用

    分配属性值
    gw.rowID = rID
    

    无需键值编码方法。

    【讨论】:

    • 这正是我所需要的。我尝试过其他演员阵容,但没有尝试过 NSNumber。简单地分配值是要走的路。谢谢!
    猜你喜欢
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多