【问题标题】:When does encodeWithCoder get called?何时调用 encodeWithCoder?
【发布时间】:2010-09-18 13:39:16
【问题描述】:

这将保存一个数组(我认为)。

- (void)encodeWithCoder:(NSCoder *)encoder {
    [encoder encodeObject:myArray forKey:@"myArray"];
}

当我想保存数组时,我必须直接调用这个方法还是必须做其他事情?

【问题讨论】:

  • 别忘了调用 super: - (void)encodeWithCoder:(NSCoder *)encoder { [super encodeWithCoder:coder]; [编码器 encodeObject:myArray forKey:@"myArray"]; }

标签: objective-c cocoa-touch xcode nscoder


【解决方案1】:

你不直接调用这个方法。如果需要序列化该对象,则由 NSCoder 子类调用。如果要对对象图进行编码,请使用 NSKeyedArchiver 的类方法 archivedDataWithRootObject:archiveRootObject:toFile:。这反过来会调用对象的encodeWithCoder: 方法。另请注意,数组中的每个对象都必须实现 NSCoding 协议。

【讨论】:

  • 我正在使用 RMMapper 库在 UserDefaults 中设置值。该库使用 NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:obj];对对象进行编码,但仍然不调用此方法。我一直在这个问题上停留了很长时间。你能帮我解决这个问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2011-10-01
相关资源
最近更新 更多