2014-12-19 3 views
2

Это код, я пытаюсь сохранить данные в plist, если значение (оценка) больше старого значения (maxscore), но я нашел ошибку ...Ошибка при получении значения из 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, когда начнется игра, чтобы показать maxScore в score labelScore ... но у меня новая ошибка, и я схожу с ума, чтобы ее решить!

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

Я действительно не понимаю, я новичок в кодировании, и у меня есть образец проекта, который сохраняет простую строку, и она отлично работает, но этот способ отредактировал whit integer, а не string, не работает в моем проекте ... –

ответ

1

Довольно уверен, что это:

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

Должно быть так:

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

Кроме того, откуда score родом из чуть позже? Похоже, что Свифт жалуется, потому что это необязательно. Если это так, то вы можете просто сделать это и забыть, если заявление:

if maxscore < score { 
    maxscore = score 
} 

Хотя, что на самом деле не имеет особого смысла, потому что вы ничего ж/maxscore после этого не делать. Я думаю, вы хотели сказать следующее:

if maxscore < score { 
    score = maxscore 
} 

Я еще раз упомяную об этом, не используйте его как 'Int Int'? Кастинг с использованием 'as? Int. Вы не должны так поступать. Измените ваше мнение:

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

оценка объявляется в viewcontroleller. проблема не решена с помощью вашего решения ... такая же ошибка в том же месте ... –

+0

Ошибка в том, что оценка не является необязательной, можете ли вы показать, как она объявлена? – Logan

+0

var score: Int = 0 –

Смежные вопросы