2011-10-02 17 views
2

私のゲームは、彼らはなど、各パーティメンバーの統計、情報、保存辞書の多くと配列

についてシングルトンは全て読んで担当している多くの辞書、配列などを含むの.plistファイルの多くが付属していますこれらのファイルは、ゲームを実行するために必要なデータを提供します。

ゲーム、多くの点で、

最終的には、プレイヤーがゲームを「保存」するオプションが与えられますなど主人公のレベル、統計情報、同様に、シングルトンからそのような値を編集します。私の元のアイデアは、シンプトンにプロジェクト内の.plistファイルを新しい編集データで上書きするように伝えることでした(新しいデータにはstatエントリや新しいパーティメンバーを表す新しい辞書などの変更があるかもしれません)。完了しました。

しかし、私はそれをどうやって行うのか、それが可能であってもわかりません。

私はNSUserDefaultsについて聞いたが、私はわからない場合は、それ私が辞書や配列 の量は、より多くの辞書を追加し続けることが可能であることは非常に大きなものとなり、そしてだろうことを考えると、目指しています何のために適しました将来的にはアレイが必要になります。パーティーには、例えば、あなたが望むだけの数のメンバーを持つことができると想像してください。

*注:複数の保存ファイル/プロファイルはありません。保存を押すと、何も聞かずに保存されます。

+1

はい、可能ですが、さらに情報が必要です。調べるべきコードスニペット? – Coffee

答えて

2

NSUserDefaultsは、相当量のデータには適していません。 plistをドキュメントディレクトリに書き、ファイル全体が確実に書き込まれるようにatomic:YESと指定してください。

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

YESの場合、アレイ(または辞書)は、補助ファイルに書き込まれ、そして は、次いで、補助ファイルは、パスに変更されます。いいえの場合、配列は がパスに直接書き込まれます。 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がPLISTの先頭の要素に応じて、10 NSArrayを持つことができます。

CoreDataの使用を検討してください。

+0

オープニングポスターがシングルトンのすべてのデータをファイルシステムに保存したい場合は、すべての配列、辞書、およびその他のオブジェクトデータをファイルシステムに保存するためにNSCodingプロトコルを実装したいと思うかもしれません。 参照:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html –

+0

私はそれを考慮しましたが、いくつかのplistがデータを含むモデルクラスには反対します。しかし、はい、NSCodingも素晴らしいソリューションであり、OPのための最良のソリューションである可能性もあります。 – zaph

関連する問題