所以我创建了一个游戏,我已经知道如何加载并保存游戏的高分,我想知道如何在主屏幕上显示高分(主菜单是第一个出现的视图)并且高分保存在第二个视图上,即游戏视图是否有办法将数据传递到主菜单而无需更改为第二个视图?请帮助,感谢任何回复的人!
答案 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)
创建一个类,如下面的类至少包含两个方法saveHighScore
和readHighScore
,并且在所有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
课程。