2014-12-19 72 views
2

這是代碼,如果值(分數)超過舊值(maxscore),我試圖將數據保存在plist中,但是我發現錯誤...從NSUserDefaults獲取值時出錯

func write() { var maxscore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 

    if let test = score { // ERROR    
     if maxscore < score { 
      maxscore = score 
     } 
    } 
    NSUserDefaults.standardUserDefaults().setObject(score, forKey: "chiave") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

爲Xcode的錯誤是

"bond value in a conditional binding must be optional type swift" 

編輯新的問題!我在比賽結束時寫出了plist,並且我想在比賽開始時閱讀plist,在scoreScore中顯示maxScore ...但是我有一個新的錯誤,我會瘋狂地解決它!

func write() { 

    var maxScore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 
     if maxScore < score { 
      maxScore = score 
    } 

    NSUserDefaults.standardUserDefaults().setObject(maxScore, forKey: "chiave") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

func read() { 

    var maxScore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 

    println(maxScore) // CONSOLE RETURN -> "Optional(0)" 

    labelScore.text = String(maxScore) // ERROR "Could not find an overload for init that accept the supplied argument 
} 
+1

我真的不明白爲什麼這會被拒絕投票......這是一個合理的問題。 – Oxcug

+0

你的問題是關於plist文件的寫法,你的解釋是關於NSUserDefaults的。 – Mrunal

+0

我真的不明白,我是新的編碼,我有一個示例項目,保存一個簡單的字符串,它的工作完美,但這種方式編輯白整數,而不是字符串不工作在我的項目... –

回答

1

很肯定這一點:

var maxscore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as Int? 

應該是這樣的:

var maxscore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as? Int 

此外,來自哪裏了一下後score?看起來Swift抱怨是因爲它不是可選的。如果是這樣的話,你可以做到這一點,忘了if語句:

if maxscore < score { 
    maxscore = score 
} 

雖然,這並不真正使多大意義,因爲你沒有做任何事情後W是/ maxscore。我認爲你的意思是這樣的:

if maxscore < score { 
    score = maxscore 
} 

我會再次提到這一點,不要使用'作爲Int?'使用「as」投射?詮釋」。你不應該那樣做。將您的閱讀內容更改爲:

if let score = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as? Int { 
    labelScore.text = "\(score)" 
} 
+1

得分在viewcontroleller中聲明。問題沒有解決您的解決方案...在同一個地方相同的錯誤... –

+0

錯誤是因爲分數是不是可選的,你可以顯示它是如何宣佈? – Logan

+0

var score:Int = 0 –