【问题标题】:Swift - setValuesForKeys(dictionary) error - this class is not key value coding-compliant for the keySwift - setValuesForKeys(dictionary) 错误 - 此类不符合键的键值编码
【发布时间】:2017-12-23 20:24:01
【问题描述】:

我是 Swift 新手,遇到了一个错误问题这个类与键的键值编码不兼容

我已重新阅读所有相关主题,但没有找到解决此问题的方法。

请查看代码并给我一些建议,我做错了什么?

class FriendScore: NSObject {
var name:String?
var highestScore:Int?
}

var allScoresArr = [FriendScore]()
var dataArr = [[String:Any]]()

dataArr =[["name": "Ben", "highestScore": 15],["name": "Alex", "highestScore": 12]]

for user in dataArray {

if let dictionary = user as? [String:Any] {
                        let friendScore = FriendScore()

                        //Error Happens Here "Thread Breakpoint"
                        friendScore.setValuesForKeys(dictionary) 
                        allScoresArr.append(friendScore)
                    }
 }

 print(allScoresArr)

错误:

<__lldb_expr_73.FriendScore 0x608000266080> 
setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key highestScore.

'libc++abi.dylib: terminating with uncaught exception of type NSException

【问题讨论】:

  • 基本上是 stackoverflow.com/questions/26366082/… 的副本:Int? 在 Objective-C 中是不可表示的。将其设为 IntNSNumber?
  • @Martin R 感谢您的帮助!
  • 我也打过这个。不幸的是,“经验教训”是 Swift 不如 Objective-C 灵活和强大,这在本机语言中是显而易见的

标签: arrays swift dictionary


【解决方案1】:

据我所知,您的示例存在许多错误。首先,定义var dataArr,然后重新定义let dataArr,然后实际迭代dataArray

除此之外,您的 dataArr 是一个字典数组。每个字典的类型为[String: Any]。当您调用setValuesForKeys(dictionary) 时,它会尝试将namehighestScore 的值设置为字典中的值。这些值中的每一个都是Any 类型,但FriendScore 类期望的是nameString 类型的值和highestScoreInt 类型的值。您需要将每个值转换为正确的类型:

class FriendScore: NSObject {
    var name:String?
    var highestScore:Int?
}

let dataArr = [["name": "Ben", "highestScore": 15],["name": "Alex", "highestScore": 12]]

for user in dataArr {
    let friendScore = FriendScore()
    friendScore.name = user["name"] as? String
    friendScore.highestScore = user["highestScore"] as? Int
}

如果您的类有多个相同类型的参数,您可以简单地使用setValuesForKeys 并传递一个具有除Any 以外的显式类型的字典。

【讨论】:

  • "var dataArr, then redefine let dataArr" - 这只是示例中的一个错误,错字,不幸的是我拼错了。关键问题是在 Friendscore 课上,Martin R 已经帮助了我。但无论如何,@drootang 感谢您的分析以及您的建议和 cmets。我很感激!
猜你喜欢
  • 2019-06-23
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2017-10-15
相关资源
最近更新 更多