我需要能够比较使用 NSKeyedArchiver 创建的 plist 文件的两个版本。特别是,它是在 Xcode 中为 .xcdatamodeld 文件创建的“元素”文件。
由于我自己没有创建这个文件,我无法重新创建它的对象模型。相反,我需要了解存档包含哪些类和键控属性。
理想情况下,我想创建一个树,其中包含表示类名称及其属性名称和值的字符串。我假设所有这些信息都存储在档案中,所以应该可以一般地解析这个档案,对吧?
我读过 NSKeyedUnarchiver 及其代表。我只得到了这样的:
解压文件数据:
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
unarchiver.delegate = self;
id graph = [unarchiver decodeObjectForKey:@"root"];
这是请求未知类时调用的委托方法。我在这里返回一个代理类,我希望在其中收集它的值:
- (Class)unarchiver:(NSKeyedUnarchiver *)unarchiver cannotDecodeObjectOfClassName:(NSString *)name originalClasses:(NSArray *)classNames
{
NSLog(@"wants: %@", name);
return [ObjProxy class];
}
代理类实现
- (id)initWithCoder:(NSCoder *)aDecoder
我不知道如何进行,不知道类的实际属性。NSCoder 似乎没有提供任何学习可用键的功能。是否有一个技巧来获得它们,也许是通过覆盖一些较低级别的 objc 方法?
到目前为止,通过上面显示的这个小代码,在解析“元素”文件时,我只得到了一个类的请求,“XDPMModel”,然后就完成了。
任何想法如何让这个工作,即更深入地遍历树?