【问题标题】:Saving application data state on exit退出时保存应用程序数据状态
【发布时间】:2010-02-03 17:37:36
【问题描述】:

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

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

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

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

我想我需要存储:

按钮标签, 按钮对应数组值,
按钮状态(是否已点击,是否显示值)

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

我查看了几个示例,它们将数据存储到 .DAT 文件中,但在实施时遇到了问题……我想知道这是否是最好的方法。

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

地理…

【问题讨论】:

    标签: iphone objective-c xcode


    【解决方案1】:

    你应该可以将它存储在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];
    

    【讨论】:

    • 我不推荐使用 NSUserDefaults 来存储游戏状态。此外,您需要在设置值后调用synchronize 的默认值,否则它们可能无法保存到磁盘。
    • 使用NSUserDefaults 有什么问题,St3fan?这当然不是一种不常见的方法。
    • NSUserDefaults 是一个很好的接口,可以为您将 plist 文件写入磁盘。因此使用它或使用手动文件读写几乎没有什么区别。这种方法很好。
    【解决方案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]; 
    

    【讨论】:

      【解决方案3】:

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

      yourArray = [NSKeyedUnarchiver unarchiveObjectWithFile:file];
      
      [NSKeyedArchiver archiveRootObject:yourArray toFile:file];
      

      编辑:

      我想NSArray自己的方法也可以

      [NSArray writeToFile:]
      [NSArray initWithContentsOfFile:]
      

      【讨论】:

        猜你喜欢
        • 2013-09-05
        • 2015-11-08
        • 1970-01-01
        • 2016-07-27
        • 2014-10-28
        • 2011-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多