假设我定义了一个实现NSCoding协议的ClassA(该类包含几个变量,如NSString,NSArray等)。 我还创建了一个ClassB,它有一个ClassA类型的变量。 像这样:
@interface ClassB: NSObject <NSCoding>
{
NSString *str;
NSDate *date;
int x;
ClassA *sc;
}
在我的程序中,我想归档一个ClassB类型的变量。 是否可以递归归档自定义对象?如果是这样,怎么样?
谢谢!
答案 0 :(得分:1)
类似于Java中序列化的工作原理,通过NSCoder存档在ObjC中的工作方式相同。基本上,每个对象都使用'id'编码,并且作为另一个对象成员的每个对象都被编码为该ID,而不是单个对象。这样,你可以安全地拥有递归对象。
答案 1 :(得分:1)
您需要为ClassB实现NSCoding接口:
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super initWithCoder:decoder];
if (self)
{
str = [[decoder decodeObjectForKey:@"MyStr"] retain];
date = [[decoder decodeObjectForKey:@"MyDate"] retain];
x = [decoder decodeIntegerForKey:@"MyX"];
sc = [decoder decodeObjectForKey:@"MyClassA"];
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder
{
[super encodeWithCoder:encoder];
[encoder encodeObject:str forKey:@"MyStr"];
[encoder encodeObject:date forKey:@"MyDate"];
[encoder encodeInteger:x forKey:@"MyX"];
[encoder encodeObject:sc forKey:@"MyClassA"];
}
ClassA也必须实现NSCoding协议。