2015-05-14 2 views
0

Я использую NSUserDefaults (StackOverflow link), чтобы сохранить высокий балл в iOS Swift (Sprite Kit).Целое число меняется на 0 после init

Он заявил так:

var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("hiScore") as! Int 

Это возвращает к примеру '2', как высокий балл.

Если высокий балл получает избили меня сделать это:

if self.score > self.savedScore { 

      NSUserDefaults.standardUserDefaults().setObject(self.score, forKey:"hiScore") 
      NSUserDefaults.standardUserDefaults().synchronize() 
      println("Synced") 
     } 

Однако, проблема заключается в том, что self.savedScore становится 0 после начального значения 2, в результате чего высокий балл, чтобы спастись после каждой игры, так как каждый возможный балл выше, чем 0.

Дополнительный код может быть предоставлен при необходимости для этого вопроса.

Спасибо!

+1

Что вы подразумеваете под «после начального значения». Точно, когда и где оно становится 0 – Gruntcakes

+0

Почему вы не используете 'integerForKey' и' setInteger' вместо Object? И почему '' hiScore'' вместо '' highScore''? И вы проверили, что он «возвращает, например,« 2 »как высокий балл»? – luk2302

+0

Похоже, вы повторно объявляете saveScore локально и, таким образом, устанавливаете локальную версию, а не self.savedScore. –

ответ

3

Вы получаете счет от NSUserDefaults и сохранить его в новой переменной:

var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("hiScore") 

saveScore переменная вы создали каждый раз, когда этот код называется. После этого вы сравниваете счет до self.savedScore, который отличается от savedScore:

if self.score > self.savedScore { ... } 

заменить первую строку, где вы получите сохранения счет с:

self.savedScore: Int = NSUserDefaults.standardUserDefaults().integerForKey("hiScore") 

и вы должны использовать, чтобы получить integerForKey данные, и когда вы его сохраняете, используйте setInteger вместо setObject

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