Iphone 目标C中类的递归归档
假设我定义了一个ClassA,它实现了NSCoding协议(这个类包含几个变量,比如NSString、NSArray等)。 我还创建了一个ClassB,其中有一个ClassA类型的变量。 大概是这样的:Iphone 目标C中类的递归归档,iphone,objective-c,xcode,archive,nskeyedarchiver,Iphone,Objective C,Xcode,Archive,Nskeyedarchiver,假设我定义了一个ClassA,它实现了NSCoding协议(这个类包含几个变量,比如NSString、NSArray等)。 我还创建了一个ClassB,其中有一个ClassA类型的变量。 大概是这样的: @interface ClassB: NSObject <NSCoding> { NSString *str; NSDate *date; int x; ClassA *sc; } @接口类B:NSObject { NSString*
@interface ClassB: NSObject <NSCoding>
{
NSString *str;
NSDate *date;
int x;
ClassA *sc;
}
@接口类B:NSObject
{
NSString*str;
NSDate*日期;
int x;
甲级*sc;
}
在我的程序中,我想归档ClassB类型的变量。
是否可以递归存档自定义对象?如果是,怎么做
谢谢 与Java中序列化的工作方式类似,通过NSCoder进行归档在ObjC中的工作方式相同。基本上,每个对象都用一个“id”编码,而作为另一个对象成员的每个对象都被编码为该id,而不是单个对象。这样,您就可以安全地拥有递归对象。您需要为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协议