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

时间:2010-02-03 17:37:36

标签: iphone objective-c xcode

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

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

我一直在研究很多例子,但由于某些原因似乎无法确定保存数据的最佳方法。

24个字符串对应24个按钮及其状态。单击按钮时,将显示该按钮标记的相应阵列信息(0 - 23)。我需要保留的是,如果点击了10个按钮并显示了他们的数据,那么保留这些数据的最佳方式是什么/什么是什么,以便在应用程序启动时重新加载?

我想我需要存储:

按钮标记, 按钮对应的数值,
按钮状态(是否已单击,值是否显示)

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

我已经看了几个例子,他们将数据存储到.DAT文件中但是实现这个问题......并且想知道这是否是最好的方法。

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

...地理位置

3 个答案:

答案 0 :(得分: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 :(得分: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]; 

答案 2 :(得分:1)

我使用NSKeyedArchiver / NSKeyedUnarchiver保存了我的数据,因为您的NSMutableArray已经支持NSCoding协议,您可以使用

yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile:file];

[NSKeyedArchiver archiveRootObject:yourArray toFile:file];

编辑:

我认为NSArray自己的方法也适用

[NSArray writeToFile:]
[NSArray initWithContentsOfFile:]