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

如何在Objective-C中对数字数组进行编码和解码?,objective-c,nsnumber,nscoding,Objective C,Nsnumber,Nscoding,我正在创建一个类,它将存储游戏的统计信息。我想将每一轮分数存储到一个可变数组中,该数组可以持久化并写入文件 我正在使用NSCoding协议并实现encodeWithCoder和initWithCoder方法 #define masteredComponentsKey @"masteredComponents" #define scoresKey @"scores" -(void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeO

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

我正在使用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中对象的指针,我认为我的分数需要是一个对象包装的整数,如NSNumber或NSValue。但是,这些对象不实现NSCoding协议

那么,使用NSCoding保存一组数字的最佳方法是什么


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

NSValue
NSNumber
实现
NSCoding
协议,以便您可以使用它们

NSValue
实现从
NSCoding
继承的
NSSecureCoding
,请查看

因此,您可以使用它们:

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

NSValue
NSNumber
实现
NSCoding
协议,以便您可以使用它们

NSValue
实现从
NSCoding
继承的
NSSecureCoding
,请查看

因此,您可以使用它们:

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

我建议使用
NSArray
方法
writeToFile:atomicly:
arrayWithContentsOfFile:
方法将数组写入文件/从文件读取数组。这是一个好主意,我考虑过使用writeToFile:atomicly。问题是我希望能够灵活地保存和恢复原始数据类型,如int、BOOL、,双重。我建议使用
NSArray
方法
writeToFile:atomicly:
arrayWithContentsOfFile:
方法将数组写入文件/从文件读取数组。这是一个好主意,我考虑过使用writeToFile:atomicly。问题是,我希望能够灵活地保存和恢复原始数据类型,如int、BOOL、double。是的,文档中就有这些类型。我将向使用代码示例的任何人指出的一件事是,encodeObject可以简单地称为_分数。谢谢你的信息!啊,是的,它就在文件里。我将向使用代码示例的任何人指出的一件事是,encodeObject可以简单地称为_分数。谢谢你的信息!