2014-12-19 4 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() 
} 

엑스 코드의 오류는

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

EDIT 새로운 문제입니다! 나는 게임이 끝날 때 plist를 쓰고 게임 시작시 plist를 읽고 labelScore에서 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? 

이되어야한다

score 조금 나중에 오는가 또한
var maxscore = NSUserDefaults.standardUserDefaults().objectForKey("chiave") as? Int 

? 스위프트는 선택 사항이 아니기 때문에 불평하고있는 것으로 보입니다. 이 경우, 당신은이 작업을 수행하고 if 문을 잊을 수 : 그 후/maxscore w 아무것도하지 않기 때문에 정말 많은 이해가되지 않는

if maxscore < score { 
    maxscore = score 
} 

,하지만. 당신이 말하고자하는 것은 이것입니다 :

if maxscore < score { 
    score = maxscore 
} 

나는 이것을 다시 언급 할 것이고 'as Int'를 사용하여 캐스트하지 않을 것입니다. 사용하여 캐스트 '로? Int '. 그렇게해서는 안됩니다. 읽으신 내용을 다음으로 변경하십시오.

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

score는 viewcontroleller에서 선언됩니다. 문제가 해결되지 않았습니다 ... 같은 장소에서 같은 오류가 발생했습니다 ... –

+0

점수가 선택 사항이 아니기 때문에 오류입니다. 신고 방법을 표시 할 수 있습니까? – Logan

+0

var score : Int = 0 –

관련 문제