当前位置: 代码迷 >> Iphone >> plist资料无法反编译
  详细解决方案

plist资料无法反编译

热度:38   发布时间:2016-04-25 06:13:08.0
plist文件无法反编译
本帖最后由 wei__cn 于 2012-10-23 10:55:59 编辑 我是照书上的一个例子来写代码的,例子给出了一个plist文件,但是我把文件复制过来,用我自己写的对象类来进行发编译却失败了。
plist文件总体结构:

plist文件部分详细结构:

我的类名是President,上图显示的item7中有两个BIDPresident,这是书上的例子中的对象类名。我试过把那个名字改为我自己的类名,结果得不到任何结果。请问item7的部分是什么意思?
反编译部分的代码:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Presidents" ofType:@"plist"];
NSData *data = [[NSData alloc] initWithContentsOfFile: path];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
NSMutableArray *array = [unarchiver decodeObjectForKey:@"Presidents"];

使用改代码得到的array数组长度为0
------解决方案--------------------
看你的plist文件,其结构是这样的
Root
   ....$version
   ....$objects
                ....array
   .....$archiver

整个plist文件你可以看成是一个字典。所以, Root为根键 其值还是一个字典,这个字典包括$version,$objects等等。而$objects这个对应的是一个Array数组。

所以应该是这样。。
NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:path];
然后再NSDictionary *rootDic = [dictionary objectForKey:@"Root"];
然后再NSArray *arr = [rootDic objectForKey:@"Presidents"];
当然取之前最好判断下其状态,为空啊为什么的。

至于你写的打包又解包啥的代码,我不是很明白。读plist不是这样读的,除非你保存的时候对当前的内容进行打包了,不然不用上面的代码。


------解决方案--------------------
多谢楼上指点啊!
NSDictionary *rootDic = [dictionary objectForKey:@"Root"];没有得到任何内容啊!
我是刚学习ios(自学),还不怎么理解plist文件,这个文件是拷贝过来的,只是里面有些内容我还不是很了解。
那些$version、$objects前面的 $ 符号是什么意思啊?在整个文件里面并没有创建Presidents键,为什么通过这个键可以获得一个个的President对象?我自己写的代码不能实现,但是示例代码却可以,两个地方的代码是一样的,就是上面的那段,是不是在这个plist文件里面有些什么设置啊?