iOS:在本地保存高分
Posted
技术标签:
【中文标题】iOS:在本地保存高分【英文标题】:iOS: Saving high-score locally 【发布时间】:2012-03-29 14:09:06 【问题描述】:我想保存一个高分仅供本地使用。一个 int,它保存着你的最高分,所以当得到一个新的分数时我可以用它来测试。
你会推荐使用 plist 吗?
类似:
NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"Info.plist"];
NSDictionary *plistData = [[NSDictionary dictionaryWithContentsOfFile:finalPath] retain];
versionLabel = [[UILabel alloc] initWithFrame:CGRectMake(100,100,60,25)]; // for example
versionLabel.backgroundColor = [UIColor clearColor];
versionLabel.textColor = [UIColor whiteColor];
versionLabel.font = [UIFont systemFontOfSize:10];
NSString *versionString = [NSString stringWithFormat:@"v%@", [plistData objectForKey:@"CFBundleVersion"]];
versionLabel.text = versionString;
[self.view addSubview:versionLabel];
下次打开应用时是否可以使用这些数据?
【问题讨论】:
【参考方案1】:恕我直言,最快最简单的方法就是使用 NSUserDefaults。您可以获得读取/写入 plist 的速度,但您不需要为单个值创建一个全新的文件。设置高分的代码如下所示..
[[NSUserDefaults standardUserDefaults] setInteger:100 forKey:@"high_score"];
繁荣,这就是你所需要的。然后,当您下次启动应用程序并想要检查该高分时,可能在 -(void)gameEnded 方法或 - (void)viewDidLoad 中,您只需说
NSInteger lastHighScore = [[NSUserDefaults standardUserDefaults] integerForKey:@"high_score"];
lastHighScore 现在将是您之前保存的用户默认值中存储的值。如果 key 已经存在,使用 setInteger:forKey: 会覆盖之前的值。
【讨论】:
这很好用,但是对于那些想要最终使这些分数全球化(即使用游戏中心或 ngmoco 或其他)的人来说,请注意:NSUserDefaults
只是一个 plist。对于越狱手机的人来说,进入并更改这些值以给自己高分是非常微不足道的。
很高兴知道这一点。我从来没有对 GameCenter 做过任何事情,也没有用破过牢的手机破解 plist。感谢您的洞察力!
不要忘记同步(如果您希望它立即写入磁盘。或者当您需要它时它可能不存在)[[NSUserDefaults standardUserDefaults] 同步];以上是关于iOS:在本地保存高分的主要内容,如果未能解决你的问题,请参考以下文章