我正在创建一个用于存储游戏统计信息的类。我想将每个圆形分数存储到一个可变数组中,该数组可以持久存储并写入文件。
我正在使用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帖子,请原谅任何不寻常的礼仪----
答案 0 :(得分:4)
NSValue
和NSNumber
实施NSCoding
协议,以便您可以使用它们。
NSValue
实施NSSecureCoding
继承自NSCoding
,请查看Reference
所以你可以使用它们:
[encoder encodeObject:@(_scores) forKey:scoresKey];
...
_scores = [[decoder decodeObjectForKey:scoresKey] intValue];