如何初始化这个存档对象?

时间:2009-11-04 14:34:09

标签: iphone cocoa-touch

我创建了一个符合协议的类。所以我已经实现了这样的init方法:

- (id)initWithCoder:(NSCoder*)decoder {
 if ((self = [super init])) {
  self.someIvarObject = [decoder decodeObjectForKey:kObjectKey];
 }
 return self;
}

当然我也实施了-(void)encodeWithCoder:(NSCoder*)encoder方法。

我还没想出我现在如何归档这个对象。我是否必须创建我的对象的实例,然后只需调用-initWithCoder:并提供适当的NSCoder对象?

我问的原因是我需要知道是否可以在此初始化方法中添加另一个参数。当我自己称呼它时,我猜应该没问题。虽然我必须使用正确的协议签名来实现-(void)encodeWithCoder:(NSCoder*)encoder

也许某人可以提供一个小例子来快速显示一个对象是如何取消归档的?那会很棒!

编辑:这是我尝试做的更详细的例子。不知道这是否适用于像这样的可存档对象......

- (id)initWithCoder:(NSCoder*)decoder somethingSpecial:(Special*)special {
 if ((self = [super init])) {
  self.someIvarObject = [decoder decodeObjectForKey:kObjectKey];
  self.somethingSpecial = special;
 }
 return self;
}

- (id)initWithCoder:(NSCoder*)decoder {
 return [self initWithCoder:decoder decimalCalculator:nil];
}

2 个答案:

答案 0 :(得分:0)

您可以查看NSArchiver课程。

它是NSCoder的子类,它将从/ NSData对象存档和取消存档。

然后,您可以将NSData存储在文件或任何其他位置以重新创建对象。

答案 1 :(得分:0)

要编码您的对象,请致电:

NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:myObject];

解码它:

MyObject *myObject = [NSKeyedUnarchiver unarchiveObjectWithData:archive];