0

我正在尝试使用 NSKeyedArchiever 将值存储在一个数组中,该数组包含一个具有五个属性的类的对象。但是我无法使用 NSData 或 NSArray 将数据多次存储在一个位置。例如-

我有一个名为 car 的类,它有五个属性,即型号、品牌、年份、车号和颜色。我有一个数组,将汽车对象存储在一个索引中的单个单元中。我正在尝试使用 NSKeyedArchiever n NSKeyedUnarchiever 来执行此步骤.Firtly 我使用 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 回答