【发布时间】:2014-01-01 01:07:22
【问题描述】:
我有一个NSMutableArray 的子类(必须对包含的对象实施某些限制)。我像往常一样对数组进行编码,然后对其进行解码。问题是,虽然编码类(给NSKeyedArchiver)是JOTypedMutableArray,但输出类是NSMutableArray(私有类之一)的另一个子类。
我使用 LLDB:po [NSPropertyListSerialization propertyListFromData:archivedData mutabilityOption:0 format:NULL errorDescription:NULL] 查看了存档数据。该命令的输出包含以下内容:
"$classes" = (
NSMutableArray,
NSArray,
NSObject
);
"$classname" = NSMutableArray;
在我看来,虽然归档器被赋予类簇的子类,但它被设置为忽略具体子类并编码为抽象超类。
这里的问题是:如何强制归档器正确编码对象? (或者我在这里做错了什么?)
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super init];
if (self) {
NSString *stringType = [aDecoder decodeObjectForKey:@"JOTypedMutableArrayType"];
Class classType = NSClassFromString(stringType);
_type = classType;
NSMutableArray *backingArray = [aDecoder decodeObjectForKey:@"JOTypedMutableArrayContents"];
_jo_backingArray = backingArray;
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)aCoder {
[aCoder encodeObject:NSStringFromClass(self.type) forKey:@"JOTypedMutableArrayType"];
[aCoder encodeObject:self.jo_backingArray forKey:@"JOTypedMutableArrayContents"];
}
【问题讨论】:
标签: objective-c nskeyedarchiver nscoding