2017-07-18 81 views
1

我是Swift中的新成員,並且我有一個錯誤問題此類不是密鑰編碼兼容的密鑰Swift - setValuesForKeys(dictionary)錯誤 - 這個類不是關鍵值編碼兼容關鍵

我已重讀所有相關主題,但未找到解決此問題的方法。

請查看代碼並給我一些建議,我做了什麼錯誤?

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 
+2

本質上是一個重複的https://stackoverflow.com/questions/26366082/cannot-access-property-of-swift-type-from-objective-c:'Int?'不能在Objective-C中表示。讓它成爲'Int'還是'NSNumber?' –

+0

@Martin R感謝您的幫助! – Rurom

回答

2

據我所知,你的例子有很多錯誤。首先,您定義var dataArr,然後重新定義let dataArr,然後實際重複dataArray

除此之外,你的dataArr是一個字典數組。每個字典的類型是[String: Any]。當您撥打setValuesForKeys(dictionary)時,它會嘗試將namehighestScore的值設置爲詞典中的值。這些值中的每一個都是Any類型,但FriendScore類所期望的值是nameString類型值,highestScore的值類型爲Int。您需要將每個值轉換爲正確的類型:

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其他明確的類型。

+0

「var dataArr,然後重新定義let dataArr」 - 這只是示例中的一個錯誤,錯字,我誤以爲它不幸。關鍵問題是在Friendscore課堂上,Martin R已經幫助了我。 但無論如何,@drootang感謝您的分析和建議和意見。我很感激! – Rurom

相關問題