2011-10-02 62 views
2

我的游戏自带大量包含许多词典,阵列等,他们对每个党员的统计,信息等省下很多字典和数组

单身负责读取所有的.plist文件这些文件并为我的游戏运行提供必要的数据。

本场比赛,在多点,将从单编辑这些值,像英雄一样的水平,统计等

最终,玩家将被赋予选项“拯救”的游戏。我最初的想法是基本告诉单身人士用新编辑的数据“覆盖”项目中的.plist文件(新数据可能在stat条目等方面有变化,甚至代表新党员等的全新字典)以及完成。

但是,我不知道该怎么做,或者即使有可能。

我听说NSUserDefaults的,但我不知道它是否适合什么我的目标,考虑到字典和数组量将是相当大的,而且有可能继续增加更多的字典并在未来的阵列。想象一下,例如,派对可以拥有更多的会员。

*注意:没有多个保存文件/配置文件。当您按下保存时,它会保存,而不会询问任何其他内容。

+1

是的,这是可能的,但我们需要一些更多的信息。任何代码片段要检查? – Coffee

回答

2

NSUserDefaults不适用于任何大量的数据。只需将plist写入文档目录,指定atomic:YES以确保写入整个文件。

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)flag 

如果是,则阵列(或字典)被写入到辅助文件, 则辅助文件被重命名为路径。如果否,则数组直接写入路径 。 YES选项保证路径(如果它存在 )即使在写入期间系统应该崩溃 也不会损坏。

这种方法存在两个NSArrayNSDictionary

获取文件目录:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName]; 
BOOL status = [NSDictionary writeToFile:filePath atomically:YES]; 

NSDictionary可能有十个NSArray根据plist中的顶级元素。

考虑使用CoreData。

+0

这似乎更有可能是海报希望将所有数据从他的Singleton保存到文件系统,在这种情况下,他可能想要实现NSCoding协议以将所有数组,字典和其他对象数据保存到文件系统。 请参阅:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html –

+0

我认为,但由于存在几个plist构成的摇摆与包含数据的模型类相反。但是,是的,NSCoding也是一个很好的解决方案,很可能是OP的最佳解决方案。 – zaph