退出时保存应用程序数据状态

4

我有一个包含24个字符串的NSMutableArray。

如果用户接到电话或退出应用程序,我需要保存这些数据。

我查看了许多示例,但出于某种原因似乎无法确定最佳保存数据的方法。

这24个字符串对应于24个按钮及其状态。当单击按钮时,它会显示该按钮标签(0-23)的相应数组信息。我需要保留的是,如果单击了10个按钮并显示了其数据,则如何/什么是保留此数据以便在应用程序启动时重新加载的最佳方法?

我认为我需要存储:

按钮标签, 按钮对应的数组值,
按钮状态(是否单击并显示值)

我将在退出应用程序时存储此数据,然后当再次启动应用程序时,我将确定是否存在存储的数据,如果存在则填充数组并检查按钮状态以确定是否已经显示,并相应地设置它。然后当加载此文件时,我将删除存储的数据(如果是这样存储的话,则删除.DAT文件)。这样,如果用户正常退出,在下一次启动时,它将开始新游戏。

我查看了几个将数据存储到.DAT文件中的示例,但无法实现它...而且不知道这是否是最佳方式。

非常感谢您的任何帮助或想法。

Geo...

3个回答

5

您应该能够将其存储在NSUserDefaults中。

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:buttonState forKey:@"buttonState"];
[defaults synchronize];

// Then to get the state back
NSMutableArray* buttonState = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"buttonState"] mutableCopy];

1
我不建议使用NSUserDefaults来存储游戏状态。此外,在设置值后,您需要在默认情况下调用synchronize,否则它们可能无法保存到磁盘。 - Stefan Arentz
使用NSUserDefaults有什么问题,St3fan?这绝对不是一种罕见的方法。 - Johan Kool
1
NSUserDefaults 只是一个方便的界面,可以帮助你将属性列表文件写入磁盘。所以使用它或手动读写文件没有太大的区别。这种方法是可以的。 - Alex Wayne

2
你可以将数据保存到Documents目录下的plist文件中。如果有数据,就加载它,如果没有,则意味着是一次干净的运行。
要加载数据:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documents = [paths objectAtIndex:0];
NSString *filePath = [documents stringByAppendingPathComponent:@"buttonState.plist"];
NSMutableDictionary *buttonState = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath]; 

保存数据的方法:

[buttonState writeToFile:filePath atomically: YES]; 

1

我使用NSKeyedArchiver/NSKeyedUnarchiver来保存我的数据,由于你的NSMutableArray已经支持了NSCoding协议,所以你可以直接使用。

yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

[NSKeyedArchiver archiveRootObject:yourArray toFile:file];

编辑:

我想NSArray自己的方法也可以工作

[NSArray writeToFile:]
[NSArray initWithContentsOfFile:]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接