2017-08-08 3 views
0

私はgameOverViewControllerにのみハイスコアをロードして保存しようとしています。私は正常にsecondViewControllerからgameOverViewControllerにスコアを転送しました。 gameOverViewControllerは、あなたのスコア、ハイスコアを表示し、再試行とメインメニューボタンを持っている画面上の通常のゲームのようなものです。 highScoreLabelをscoreGameOverLabelと同じに設定しようとしましたが、highScore intは0のままで、gameOverScoreと等しくありません。私しようとしています: ロード、セカンドビューコントローラでハイスコアを保存

var addOne = 0 
class SecondViewController: UIViewController 
{ 

@IBOutlet weak var score: UITextField! 

score.text = "\(addOne)" 

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 

let gameOver = segue.destination as! GameOverViewController 

gameOver.gameOverText = score.text! 
gameOver.lastScore = addOne 
} 

スコア>ハイスコア場合、

  1. ハイスコア=スコア<ハイスコア場合
  2. スコア、ハイスコアは同じまま

    gameOverViewController

    class GameOverViewController: UIViewController { 
    
    
    @IBAction func retryButton(_ sender: Any) { 
    addOne = 0 
        highScoreLabel.text = NSString(format: "%i", highScore) as String 
    } 
    
    @IBAction func mainMenuButton(_ sender: Any) { 
    addOne = 0 
        highScoreLabel.text = NSString(format: "%i", highScore) as String 
    }   
    
    var lastScore = 0 
    var highScore = UserDefaults.standard.integer(forKey: "high_score") 
    
    @IBOutlet weak var highScoreLabel: UILabel! 
    
    @IBOutlet weak var scoreGameOverLabel: UILabel! 
    
    var gameOver = "" 
    
    override func viewDidLoad() { 
        super.viewDidLoad() 
    
        if lastScore > highScore { 
         highScore = lastScore 
         highScoreLabel.text = NSString(format: "%i", highScore) as String 
         UserDefaults.standard.set(highScore, forKey: "high_score") 
        }     
        scoreGameOverLabel.text = gameOver  
    } 
    

答えて

1

SecondViewControllerには、最後のスコアを設定してみてください。 GameOverViewController

gameOver.lastScore = addOne 

lastScore変数を追加し、あなたのハイスコアを追跡します。

var lastScore = 0 
var highScore = UserDefaults.standard.integer(forKey: "high_score") 

if lastScore > highScore { 
    highScore = lastScore 
    UserDefaults.standard.set(highScore, forKey: "high_score") 
} 
+0

保存していると言っていないされていません0 – gbhall

+0

あなたは正しく、私はタイプミスがありました。今では私のスコアとハイスコアはアプリに保存されていますが、アプリを終了するとハイスコアは保存されません。 – ZDP

+0

保存していないのですか? – gbhall

1

最初には、

highScoreLabel = scoreGameOverLabel 

はおそらく第二

highScoreLabel.text = scoreGameOverLabel.text 

であるべき、スニペットごとに、GameOverViewControllerに何addOneはどのようにあなたがそれを設定し、If条件で比較するためにそれを使用している、ありませんか?

+0

ハイスコアintはまだあなたが設定またはインクリメントハイスコアの値を任意の場所に初期化 – ZDP

+0

に滞在しています「UserDefaults」には、ユーザーがあなたのアプリを離れるときでさえ、ユーザーの高いスコアが維持されます。あなたはあなたが得ているエラーを表示できますか? –

+0

後、私は、コードのでaddOne =ハイスコアを更新しましたが、それでも作業とハイスコアが0 – ZDP