2015-11-09 2 views
0

У меня это так, что когда моя игра заканчивается, она переключается на отдельный SKScene, который показывает новый высокий балл. Вот мой код:Тема 1: EXC_BAD ИНСТРУКЦИЯ с NSUserDefaults

func saveState() { 

    let defaults = NSUserDefaults.standardUserDefaults() 
    defaults.setInteger(highScore, forKey: "labelScore") //this line says "unexpectedly found nil while unwrapping an optional value 
    defaults.setInteger(stars, forKey: "SNOW") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

Что может быть ноль? У меня есть значения для всего в этой функции. При необходимости отправьте больше кода.

+0

Рекорды, вероятно, ноль. просто используйте guard let highscore = highscore else {return} –

ответ

1

Это означает, что, вероятно, это было сперва неправильно. Я бы рекомендовал использовать константы для таких вещей, как доступ к пользовательским значениям по умолчанию, чтобы этого типа не произошло.

EDIT:

То, что я обычно делаю это создать отдельный файл, который является глобальной константой файл как часть структуры В этом файле вы можете определить константы следующим образом:

struct GlobalConstants { 
    static let defaultsHighScore = "labelScore" 
} 

Тогда, когда я пытаюсь читать по умолчанию, вместо того, чтобы вводить все в каждый раз, я могу просто использовать константу следующим образом: defaults.setInteger(highScore, forKey: GlobalConstants.defaultsHighScore)

+0

Можете ли вы привести пример того, что вы имеете в виду, пожалуйста? –

+0

Я сделаю это! Спасибо огромное! –

+0

Добро пожаловать! Также обратите внимание, что с iOS 8 Apple рекомендует больше не синхронизировать значения по умолчанию после их обновления. Если вы обнаружите, что это работает для вас, пожалуйста, проголосуйте за мой ответ :) – pbush25