2014-12-26 5 views
-1

У меня проблема с сохранением и загрузкой моего сложного целого. У меня есть кнопка толкнул, чтобы решить его на одной точке зрения:Ошибка сохранения и загрузки целых чисел Swift

(Это одна трудность)

Difficulty + 1 

    let SecondDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
    SecondDefaults.setObject(Difficulty, forKey: "Difficulty") 
    SecondDefaults.synchronize() 

На другой точке зрения под viewDidLoad для загрузки:

let SecondDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
     var difficulty = SecondDefaults.valueForKey("Difficulty")?.integerValue 
     SecondDefaults.synchronize() 
     Difficulty = difficulty!.stringByTrimmingCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).toInt()! 
+1

Какой объект сложность? это Swift Integer? – Cezar

+0

Это просто целое число. – SRL

+0

Как и где вы устанавливаете сложность? И почему вы извлекаете его как строку, если это int? –

ответ

0

Вам нужно изменить:

var difficulty = SecondDefaults.valueForKey("Difficulty") as? String 

в

var difficulty = SecondDefaults.valueForKey("Difficulty")?.stringValue 

Я не знаю, почему вам нужно преобразовать целое число в строку. Вам нужен только следующий код для получения целого числа из NSUserDefaults, не нужно преобразовывать его в строку.

let SecondDefaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
var difficulty = SecondDefaults.valueForKey("Difficulty")?.integerValue 
0

Ваш вопрос лежит на этой линии:

var difficulty = SecondDefaults.valueForKey("Difficulty") as? String

Проблема заключается в том, что значение может быть строкой или оно может ноль. Кто знает? Ключевое слово as? указывает, что приведение может закончиться неудачей, поэтому сложность - это необязательная строка, которую вы неявно разворачиваете. Все, что вы развернете как ноль, даст вам ошибку времени выполнения.

Предполагая, что Difficulty из вашего второго фрагмента кода имеет типа Int, это должно работать:

let defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults() 
let maybeDifficulty = defaults.valueForKey("Difficulty") as? Int 
if let difficulty = maybeDifficulty { 
    Difficulty = difficulty 
} else { 
    println("Difficulty is not an Int or may be nil") 
} 
Смежные вопросы