1

iPhoneアプリで使用するために、複雑な構造のNSDictionaryをplistに書き込もうとしています。しかし、ファイルがまったく書き込まれていないようで、理由がわかりません。

構造は次のようになります。

Level             Dict
  Roads           Array
    Road1         Array
      Vertex1     Dict
        x         Number
        y         Number
      Vertex2     Dict
        ...

そして、これは私のコードがどのように見えるかです:

NSMutableDictionary *levels = [[NSMutableDictionary alloc] init];
NSMutableArray *roads = [[NSMutableArray alloc] init];
for(ChainLinkRoad *r in data.roads){
    NSMutableArray *road = [[NSMutableArray alloc] init];
    for(ChainPoint *p in r.v){
        NSNumber *x = [NSNumber numberWithFloat: p.x];
        NSNumber *y = [NSNumber numberWithFloat: p.y];
        NSMutableDictionary *vertex = [[NSMutableDictionary alloc] init];
        [vertex setObject:x forKey:@"x"];
        [vertex setObject:y forKey:@"y"];
        [road addObject:vertex];
    }
    [roads addObject:road];
}
[levels setObject:roads forKey:@"Roads"];
bool b = [levels writeToFile:@"test.plist" atomically:YES];
//returns true

ミュータブルを不変の対応物に変換しようとしましたが、うまくいきませんでした。最終的なNSDictionary(レベル)のデータに問題なくアクセスできます。

編集:このplistはiphoneゲームで実際に使用するためのものではないことを付け加えておきます。レベルを設計する際の個人的な使用のためです。コードは最終バージョンには存在しません。

4

2 に答える 2

1

よくある問題は、辞書が無効な UTF-8 文字のような文字列変換に対して有効でないことです。コンソールに出力して確認します。

それでも問題が解決しない場合は、一部の要素のみを保存して、何が起こっているかを確認してください。

于 2016-01-12T10:46:26.793 に答える
-1

昨日、この同じ問題に対する回答を投稿しました。クラスの個々のデータ要素を保存しようとする代わりに、NSKeyArchiverとNSCodingを使用してオブジェクト全体を保存します。完全な説明については、リンクをクリックしてください。

クラスオブジェクトの配列をPlistに保存するにはどうすればよいですか(iPhone開発)

于 2012-07-20T19:00:24.923 に答える