2015-07-17 5 views
-5

Я попытался синхронизировать сохраненные данные, но моя игра по-прежнему не сохраняет наивысший балл. Я не могу найти, что случилось с заменой highScore счетом, если он выше. Извините, что я начинающий, который только начал изучать программирование на iOS.NSUserDefaults для высокого балла не работает на симуляторе iOS 8?

init(size: CGSize, score: NSInteger) { 

    super.init(size: size) 
    self.backgroundColor = SKColor.whiteColor() 

    //To save highest score 
    var highscore = 0 
    let userDefaults = NSUserDefaults.standardUserDefaults() 
    if (score > highscore){ 
     NSUserDefaults.standardUserDefaults().setObject(score, forKey: "highscore") 
     NSUserDefaults.standardUserDefaults().synchronize() 
    } 
    var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as! Int 


    //To get the saved score 
    var savedScore: Int = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as! Int 
+1

В отредактированный код 'если (оценка> топ-лист)' будет * всегда верно * если 'счет> 0', потому что вы просто установите' Highscore 'to' 0' две строки вверх. –

ответ

2

Давайте пройдем через ваш код.

Во-первых, вы перезаписать все, что высокий балл был с 0:

//To save highest score 
let highscore = 0 
let userDefaults = NSUserDefaults.standardUserDefaults() 
NSUserDefaults.standardUserDefaults().setObject(highscore, forKey: "highscore") 
NSUserDefaults.standardUserDefaults().synchronize() 

Затем вы проверяете, если "Рекорд" в значения по умолчанию:

if let highscore: AnyObject = userDefaults.valueForKey("highscore") { 

Несколько примечаний:

  • Это будет всегда будет истинным, потому что вы просто установите это
  • Вы должны использовать objectForKey(_:), не valueForKey(_:)
  • Но на самом деле вы должны использовать integerForKey(_:) не objectForKey(_:), поскольку highscore всегда является Int.
  • Вы можете удалить : AnyObject, потому что objectForKey(_:) возвращает AnyObject?

Затем мы идем в код:

NSUserDefaults.standardUserDefaults().setObject(score, forKey: "highscore") 
    NSUserDefaults.standardUserDefaults().synchronize() 

Вы теперь перезаписывания 0 счет вы только что добавили ранее с тем, что score есть.

И, наконец, ваш блок else, который никогда не будет вызван, устанавливает highscore, хотя вы только что сделали это до состояния if.

} 
else { 
    NSUserDefaults.standardUserDefaults().setObject(highscore, forKey: "highscore") 
    NSUserDefaults.standardUserDefaults().synchronize() 
} 

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

Я не могу найти, что случилось с заменой на рекордах со счетом, если он выше.

Ну, во-первых, вы никогда не проверяете, какой из них выше.

Я думаю, что вы, возможно, пытается сделать это:

let defaults = NSUserDefaults.standardUserDefaults() 
let highscore = defaults.integerForKey("highscore") 

if score > highscore { 
    defaults.setInteger(score, forKey: "highscore") 
    defaults.synchronize() 
} 
Смежные вопросы