我创建了一个符合协议的类。所以我已经实现了这样的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];
}
答案 0 :(得分:0)
答案 1 :(得分:0)
要编码您的对象,请致电:
NSData *archive = [NSKeyedArchiver archivedDataWithRootObject:myObject];
解码它:
MyObject *myObject = [NSKeyedUnarchiver unarchiveObjectWithData:archive];