0
对象我有一个类A
和子类B
:存档/取消存档父子用钥匙
@interface A:NSObject<NSCoding>
String a;
String b;
@end
@interface B: A<NSCoding>
int c;
// `a` and `b` attributes are inherited
@end;
我要存档的A
一些对象,并使用属性a
作为key
一些B
。 在两个类中的encoding
和decoding
协议已经被定义为:
@implementation A
...
- (void) encodeWithCoder:(NSCoder *)encoder {
//[super encodeWithCoder:encoder];
[encoder encodeObject:self forKey:a];
}
- (id)initWithCoder:(NSCoder *)decoder {
// self = [super initWithCoder:decoder];
if (self=[super init]) {
self = [decoder decodeObjectForKey:a];
}
return self;
}
@end
@implementation B
..
- (void) encodeWithCoder:(NSCoder *)encoder {
[super encodeWithCoder:encoder];
[encoder encodeObject:self forKey:super.a];
}
- (id)initWithCoder:(NSCoder *)decoder {
//self = [super initWithCoder:decoder];
if (self) {
self = [decoder decodeObjectForKey:super.a];
}
return self;
}
对于一些对象列表dataArray = [A("One"), B("Two")]
,归档逻辑是
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dataArray];
NSError* error = nil;
BOOL success = [data writeToFile: @"xyz.dat" options:0 error: &error];
if (!success)
NSLog(@"error = %@", [error description]);
再从归档数据读取:
NSData *lD = [[NSData alloc] initWithContentsOfFile:@"xyz.dat"];
NSKeyedUnarchiver *arc = [[NSKeyedUnarchiver alloc] initForReadingWithData:lD];
现在将属性为a
的对象设置为"One"
在尝试从归档数据中读取对象时,我得到了null
!
NSLog(@"Value - %@",[arc decodeObjectForKey:@"One"]);
检查该链接的http://计算器。 COM /问题/ 41116832 /时,归档对象中最FUNC-encodewith-acoder-nscoder-方法 - 崩溃,使用/ 41116908#41116908 –