Я работаю над небольшой игрой. Когда пользователь запускает игру и закрывает ее, приложение сохраняет временную метку, поэтому, когда он возвращается, оно может рассчитать в секундах, как долго он отсутствовал.
Моя проблема в том, что при повторном открытии приложение вылетает. Я вижу, что это проблема преобразования, но я пробовал разные вещи, которые не работали.
Так что моя последняя надежда — переполнение стека. :-)
Мой код выглядит следующим образом: в файле AppDelegate.swift он сохраняет дату:
appData.set(Date(), forKey: GameData.lastTimeActiveStamp)
И когда пользователь повторно открывает приложение (все еще AppDelegate.swift)
GameScene().calculateTimeLeft()
И, наконец, мой GameScene.swift:
let timeSinceActive = appData.object(forKey: GameData.lastTimeActiveStamp)!
/* Check the difference */
let elapsedTime = Date().timeIntervalSince(timeSinceActive as! Date)
/* Convert this to seconds */
let timeSpentAwayInSeconds = Int(elapsedTime)
/* Find out how many seconds the user had left when he quitted the game */
let currentTimeLeft = appData.integer(forKey: GameData.currentTimeLeft)
/* If the time spent away is larger than the seconds there was left, the game is over */
if timeSpentAwayInSeconds > currentTimeLeft {
/* Game over */
appData.set(0, forKey: GameData.currentTimeLeft)
GameOver()
}
Изменить:
Забыл вставить лог:
Could not cast value of type '__NSCFData' (0x1b8c90f30) to 'NSDate' (0x1b8c91b10).
2017-08-29 20:16:49.533396+0200 Sleepy[929:226885] Could not cast value of type '__NSCFData' (0x1b8c90f30) to 'NSDate' (0x1b8c91b10).
appData
простоUserDefaults.standard
?) - person Phillip Mills   schedule 29.08.2017appData.object
. - person Phillip Mills   schedule 29.08.2017GameData.lastTimeActiveStamp
откуда-то еще и когда вы его сбрасываете? - person Vini App   schedule 30.08.2017