如何解析使用NSKeyedArchiver创建的外部文件的内容

Tho*_*ann 4 cocoa core-data nskeyedarchiver

我需要能够比较使用NSKeyedArchiver创建的plist文件的两个版本.特别是,它是在Xcode中为.xcdatamodeld文件创建的"元素"文件.

由于我自己没有创建此文件,因此无法重新创建其对象模型.相反,我需要了解归档包含哪些类和键控属性.

理想情况下,我想创建一个包含表示类名称及其属性名称和值的字符串的树.我假设所有这些信息都存储在存档中,因此应该可以一般地解析这个存档,对吧?

我已经阅读了有关NSKeyedUnarchiver及其代理人的信息.我只是这样:

取消归档文件数据:

NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
unarchiver.delegate = self;
id graph = [unarchiver decodeObjectForKey:@"root"];
Run Code Online (Sandbox Code Playgroud)

这是在请求未知类时调用的委托方法.我在这里返回一个代理类,我希望在其中收集它的值:

- (Class)unarchiver:(NSKeyedUnarchiver *)unarchiver cannotDecodeObjectOfClassName:(NSString *)name originalClasses:(NSArray *)classNames
{
    NSLog(@"wants: %@", name);
    return [ObjProxy class];
}
Run Code Online (Sandbox Code Playgroud)

代理类实现

- (id)initWithCoder:(NSCoder *)aDecoder
Run Code Online (Sandbox Code Playgroud)

其中我不知道如何继续,不知道类的实际属性.NSCoder似乎没有提供任何功能来了解可用的密钥.是否有一个技巧可以通过覆盖一些较低级别的objc方法来获取它们?

到目前为止,通过上面显示的这个小代码,在解析"elements"文件时,我只获得了一个类"XDPMModel"的请求,然后就完成了.

任何想法如何使这个工作,即更深入地穿越树?

0xc*_*ced 6

您可以使用PlistExplorer,它是一个Cocoa工具来检查由NSKeyedArchiver编写的文件.