在游戏SWIFT XCODE的主菜单上加载高分

时间:2016-08-02 04:38:51

标签: ios swift xcode

所以我创建了一个游戏,我已经知道如何加载并保存游戏的高分,我想知道如何在主屏幕上显示高分(主菜单是第一个出现的视图)并且高分保存在第二个视图上,即游戏视图是否有办法将数据传递到主菜单而无需更改为第二个视图?请帮助,感谢任何回复的人!

2 个答案:

答案 0 :(得分:0)

您可以使用NSUserdefaults执行此任务。在第二个视图中,将Highscore值设置为NSUserdefaults,如下所示,

NSUserDefaults.standardUserDefaults().setObject(YourValue, forKey:"HighScore")
NSUserDefaults.standardUserDefaults().synchronize() 

然后在您的第一个视图的viewdidload方法中添加此内容,

if(NSUserDefaults.standardUserDefaults().objectForKey("HighScore") as! String != "") {
       self.yourLabelName.text = HigheScore
       } else {
         print("No highscore set.")
       }

答案 1 :(得分:0)

创建一个类,如下面的类至少包含两个方法saveHighScorereadHighScore,并且在所有viewControllers中以及您想要访问得分的所有其他类中创建此类的实例并调用你想要的方法。

<强>夫特

public class ScoreManager: NSObject {

    let highScoreDefaultKey = "HighScoreDefaultKey"

    public func saveHighScore (highScore: NSNumber) {

        //This method includes your implementation for saving the high score
        //You can use UserDefault or any other data store like CoreData or
        //SQLLit or etc. For example I added UserDefault

        NSUserDefaults.standardUserDefaults().setObject(highScore, forKey: highScoreDefaultKey)
        NSUserDefaults.standardUserDefaults().synchronize()

    }

    public func getHighScore() -> NSNumber?
    {
        //This method includes your implementation for reading the high score

        let highScore = NSUserDefaults.standardUserDefaults().objectForKey(highScoreDefaultKey)

        if (highScore != nil) {
            return highScore as! NSNumber?;
        }else
        {
            //No high score availble, so return nil
            return nil;
        }
    }
}

用法:

    var highScore = ScoreManager().getHighScore()

    ScoreManager().saveHighScore(NSNumber(int: 120))

<强>目标C

#import "ScoreManager.h"

#define USERDEFAULTS_HIGHSCRORE_KEY @"highScore"

@implementation ScoreManager

- (void) saveHighScore:(NSNumber *) highScore
{
    //This method includes your implementation for saving the high score
    //You can use UserDefault or any other data store like CoreData or
    //SQLLit or etc. For example I added UserDefault

    [[NSUserDefaults standardUserDefaults] setObject:highScore forKey:USERDEFAULTS_HIGHSCRORE_KEY];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (NSNumber *) readHighScore
{

    //This method includes your implementation for reading the high score

    NSNumber *highScore = [[NSUserDefaults standardUserDefaults] objectForKey:USERDEFAULTS_HIGHSCRORE_KEY];
    if (highScore) {
        return highScore;
    }else
    {
        //No high score availble, so return nil

        return nil;
    }

}

@end

优点是:

1-您的读写过程的实施仅在一个地方,您可以随时更改它(例如从UserDefaults切换到CoreData)并且不必担心更改您正在使用分数

的所有地方

2-当您想要访问得分或写入时,只需调用一种方法。

3-当您看到错误或类似内容时,只需调试它即可。

注意:如果您担心synchronization,最好使用管理此问题的singleton课程。