【问题标题】:How can I encode and decode an Array of Numbers in Objective-C?如何在 Objective-C 中对数字数组进行编码和解码?
【发布时间】:2013-08-14 04:56:23
【问题描述】:

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

我正在使用 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 上的第一篇文章,如有不妥之处请见谅----

【问题讨论】:

  • 我推荐NSArray方法writeToFile:atomically:arrayWithContentsOfFile:方法用于将数组写入文件/从文件中读取数组。
  • 这是个好主意,我考虑过使用 writeToFile:atomically。问题是我希望灵活地保存和恢复原始数据类型,例如 int、BOOL、double。

标签: objective-c nsnumber nscoding


【解决方案1】:

NSValueNSNumber 实现 NSCoding 协议,以便您可以使用它们..

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

所以你可以使用它们:

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

【讨论】:

  • 啊,是的,它就在文档中。我将向使用您的代码示例的任何人指出一件事,encodeObject 可以简称为 _scores。感谢您的信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
相关资源
最近更新 更多