如何在Objective-C中编码和解码数字数组?

时间:2013-08-14 04:56:23

标签: objective-c nsnumber nscoding

我正在创建一个用于存储游戏统计信息的类。我想将每个圆形分数存储到一个可变数组中,该数组可以持久存储并写入文件。

我正在使用NSCoding协议并实现encodeWithCoder和initWithCoder方法。

#define masteredComponentsKey @"masteredComponents"
#define scoresKey   @"scores"
-(void)encodeWithCoder:(NSCoder *)encoder
{
    [encoder encodeObject:_masteredComponents forKey:masteredComponentsKey];
    [encoder encodeObject:_scores forKey:scoresKey];

}

-(id)initWithCoder:(NSCoder *)decoder
{
    self = [super init];
    if (self)
    {
        _masteredComponents = [decoder decodeObjectForKey:masteredComponentsKey];
        _scores = [decoder decodeObjectForKey:scoresKey];
    }
    return self;
}

由于数组是Objective-C中对象的指针,因此我认为我的分数需要是一个Object-Wrapped整数,例如NSNumber或NSValue。但是,这些对象不实现NSCoding协议。

那么使用NSCoding持久保存一堆数字的最佳方法是什么?

----这是我的第一篇StackOverflow帖子,请原谅任何不寻常的礼仪----

1 个答案:

答案 0 :(得分:4)

NSValueNSNumber实施NSCoding协议,以便您可以使用它们。

NSValue实施NSSecureCoding继承自NSCoding,请查看Reference

所以你可以使用它们:

[encoder encodeObject:@(_scores) forKey:scoresKey];
...
_scores = [[decoder decodeObjectForKey:scoresKey] intValue];