Как использовать CoreData для хранения наилучшего результата игры в xcode 6?

#core-data #swift #ios8

#core-data #swift #ios8

Вопрос:

Я работаю над игрой, и у меня возникла некоторая проблема с сохранением наилучшего результата за всю историю для нее. Сейчас я использую CoreData, но каждый раз, когда я запускаю игру, результат сравнивается с Int (17) и отображается более высокий. Для которых число 17 может быть первым результатом, который я получил при запуске игры. т. Е. самый высокий результат тогда сохраняться не будет.

Код выглядит следующим образом. Спасибо!

 // Decide if the game ends
    var actionArray: NSMutableArray = NSMutableArray()
    actionArray.addObject(SKAction.runBlock({
        var transition:SKTransition = SKTransition.flipHorizontalWithDuration(0.5)

        //Use CoreData
        var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
        var context:NSManagedObjectContext = appDel.managedObjectContext


        var request = NSFetchRequest(entityName:"Score")
        request.returnsObjectsAsFaults=false
        request.predicate = NSPredicate(format:"fetchScore = %@","fetchScore")

        var results:NSArray = context.executeFetchRequest(request, error: nil)

        if (results.count > 0) {

            var compareBest:Int = 0

            var res = results[0] as NSManagedObject

            compareBest = res.valueForKey("bestScore") as Int

            if compareBest < self.score {
                var newBestScore = NSEntityDescription.insertNewObjectForEntityForName("Score", inManagedObjectContext: context) as NSManagedObject

                newBestScore.setValue("fetchScore", forKey:"fetchScore")
                newBestScore.setValue(Int(self.score), forKey: "bestScore")

                context.save(nil)
                self.bestScore = self.score

            }else{
                self.bestScore = compareBest
            }


        }else{
            var newBestScore = NSEntityDescription.insertNewObjectForEntityForName("Score", inManagedObjectContext: context) as NSManagedObject

            newBestScore.setValue(Int(self.score), forKey: "bestScore")
            newBestScore.setValue("fetchScore", forKey:"fetchScore")
            context.save(nil)
            self.bestScore = self.score
        }


        var gameOverScene:SKScene = GameOverScene(size: self.size, won: false, scored: self.score, best: self.bestScore)
        self.view.presentScene(gameOverScene,transition:transition)
        }))
  

Комментарии:

1. Почему бы вам не использовать NSUserDefaults, если вы собираетесь сохранять только наивысший результат? Это намного проще, чем Core Data…

2. Спасибо! Я понял это. Вы правы.