0

NSKeyedArchieverを使用して、5つの属性を持つクラスのオブジェクトを含む配列に値を格納しようとしていますが、NSDataまたはNSArrayを使用して1つの場所にデータを複数回格納することはできません。例えば-

model、make、year、carnumber、colorの5つの属性を持つcarという名前のクラスがあります。1つのインデックスの単一のユニットに車のオブジェクトを格納する配列があります。NSKeyedArchievernNSKeyedUnarchieverを使用してこの手順を実行しようとしています。 .最初にNSKeyedアーキエバーを使用して値をクラスの車の変数に格納し、それを配列に格納したいのですが、それはできません。コードを手伝ってくれませんか。理解できません。問題は何ですか。

4

1 に答える 1

0

私が知っているように、カスタムオブジェクトを保存するには NSCoding を使用する必要があります。

私の例のように、クラス Game があり、この NSCoding メソッドでエンコードおよびデコードしています

-(void)encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:[NSNumber numberWithInt:turnTime] forKey:@"turnTime"];
    [aCoder encodeObject:[NSNumber numberWithBool:time] forKey:@"extra"];
    [aCoder encodeObject:[NSNumber numberWithBool:saved] forKey:@"saved"];
    [aCoder encodeObject:dragon forKey:@"dragon"];
    [aCoder encodeObject:playerJokers forKey:@"playerJokersKey"];
}

- (id)initWithCoder:(NSCoder *)aDecoder
{
    turnTime=[[aDecoder decodeObjectForKey:@"turnTime"] integerValue];
    dragon=[aDecoder decodeObjectForKey:@"dragon"];
    time=[[aDecoder decodeObjectForKey:@"extra"] boolValue];
    saved=[[aDecoder decodeObjectForKey:@"saved"] boolValue];
    playerJokers=[aDecoder decodeObjectForKey:@"playerJokersKey"];
    return self;

}

ゲームデータをセーブする

-(void)saveGameData
{
    NSLog(@"saveGameData");

    NSUserDefaults * userdefaults=[NSUserDefaults standardUserDefaults];

    NSData * gameData=[NSKeyedArchiver archivedDataWithRootObject:self];

    [userdefaults setObject:gameData forKey:@"gameKey"];

    [userdefaults synchronize];
}

この方法で見られるように; カスタム クラスを NSData に変換し、NSArray に追加できます。

使いたいときに。配列を復元すると、車のデータを含む配列があります。

セーブデータを使いたいとき

Game * savedGame=[NSKeyedUnarchiver unarchiveObjectWithData:gameData];
于 2013-03-12T02:05:09.913 に答える