1

作成中の iPhone アプリのデータを保存しようとしています。私のデータ構造は、個々の gameArray を含む gamesArray を保存することです。各 gameArray には、日付、名前、ホーム/アウェイ、および shotArray があります。shotArray にはショットが含まれています。ロードされたショットは、UIButtons を作成して画面に表示します。shotButtonArray にはこれらのボタンが含まれています。plist エディターでファイルを表示すると、個別の配列が表示されません。1 つの配列しか表示されず、作成されたすべてのオブジェクトが一覧表示されます。配列が 1 つしか表示されないのはなぜですか。これが私のデータの保存方法です

for (UIButton *button in shotButtonArray) {

        assert([button isKindOfClass:[UIButton class]]);
        [button removeFromSuperview];
    }
    for (Shot *shot in shotArray) {
        [shot subtract_miss_And_make];
    }
    [self reDrawShots];
    [shotButtonArray removeAllObjects];
    [shotArray removeAllObjects];
    [gameArray removeAllObjects];
    [gameArray addObject:theDate];
    [gameArray addObject:theName];
    NSNumber *theNumber = [NSNumber numberWithInt:homeAway];
    [gameArray addObject:theNumber];
    [gameArray addObject:shotArray];
    gameNumber = 0;
    [gamesArray addObject:gameArray];
    NSString *path = [self findGamesPath];
    [NSKeyedArchiver archiveRootObject:gamesArray toFile:path];

データを間違って保存していませんか? 配列が 1 つしか表示されないのはなぜですか。

4

1 に答える 1

1

保存方法に技術的な問題はありません。私は混乱しています。gameArray に保存する前に、なぜ shotArray からすべてのオブジェクトを削除するのですか? また、gameArray 内に gameArray を 1 つだけ格納するのはなぜですか?

これを保存する方法に問題はありませんが、これを行うためのより良い方法を提案します。「ゲーム」を表す新しいクラスを作成する必要があります。これにより、キーと値を使用して、日付、名前、番号などの必要な属性を保存できます。そのクラスで -(void)encodeWithCoder:(NSCoder*)coder 関数をオーバーライドすると、次のように呼び出すことができます。

[coder encodeObject:theData forKey:@"DATE"];
[coder encodeInteger:theNumber forKey:@"NUMBER"];

次に、 - (void)encodeWithCoder:(NSCoder *)encoder をオーバーライドすると、次の呼び出しでその値にアクセスできます。

theDate = [[coder decodeObjectForKey:@"DATE"] retain];
theNumber = [coder decodeObjectForKey:@"NUMBER"];

このようにして、これらのオブジェクトの配列を作成し、NSKeyedArchiver に配列をそのルート オブジェクトとしてアーカイブするように依頼するだけで、すべてが「ゲーム」クラス内できれいに処理されます。他のより複雑な値を保存したい場合は、追加のクラスを作成し、encodeObject および decodeObject 関数を使用できます。

詳細については、こちらを参照してください: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html

于 2011-04-23T22:51:19.130 に答える