无法在目标C中打开使用CFPropertyList在PHP中生成的plist文件

无法在目标C中打开使用CFPropertyList在PHP中生成的plist文件,php,objective-c,plist,nskeyedunarchiver,Php,Objective C,Plist,Nskeyedunarchiver,我有一个包含序列化plist的二进制文件。该文件由以下语句在PHP中生成: namespace CFPropertyList; require_once(__DIR__.'/../classes/CFPropertyList/CFPropertyList.php'); $a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z')); $plist_filename = __DIR__ .

我有一个包含序列化plist的二进制文件。该文件由以下语句在PHP中生成:

namespace CFPropertyList;

require_once(__DIR__.'/../classes/CFPropertyList/CFPropertyList.php');

$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));

$plist_filename = __DIR__ . '/simple_array.plist';

$plist = new CFPropertyList();
$td = new \CFPropertyList\CFTypeDetector();
$guessedStructure = $td->toCFType($a);
$plist->add($guessedStructure);
$plist->saveBinary($plist_filename);
simple_array.plist文件的二进制内容为:

6270 6c69 7374 3030 d301 0203 0405 0651 6151 6251 6355 6170 706c 6556 6261 6e61 6e61 a307 0809 5178 5179 517a 080f 1113 151b 2226 282a 0000 0000 0101 0000 0000 000a 0000 0000 0000 0000 002c

我可以在Xcode中打开simple_array.plist(通过双击它),而不会出现问题

我也可以稍后在PHP中使用以下语句重新打开它,而不会出现问题:

$plist = new CFPropertyList( $plist_filename, CFPropertyList::FORMAT_BINARY );
问题是当我试图在目标C中打开文件时。我使用的语句如下:

NSData *tempData = [NSData dataWithContentsOfFile:path_to_plist_file];
NSArray *fileInfoArray = [NSKeyedUnarchiver unarchiveObjectWithData:tempData];
fileInfoArray
nil

最后两条语句打开在Objective C中生成的其他plist文件,但不是PHP(在Linux上)生成的文件


知道这是怎么回事吗?此网页介绍了NSCoding对NSKeyed的重要性​建筑师。。。这是否相关?如果相关,我如何在PHP中应用?

您可以使用以下内容将plist读入词典:

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfURL:fileURL];
或者您可以使用
NSPropertyListSerialization

NSPropertyListFormat format;
NSError *error;
NSDictionary *dictionary = [NSPropertyListSerialization propertyListWithData:data options:0 format:&format error:&error];
有了你的数据,这两个都对我有用


有关更多信息,请参阅。

谢谢您的回答,@Rob。它解决了我的问题。它还解释了为什么将plist读入数组不起作用:它的结构太复杂了。(我所面对的真正的实践者是极其复杂的)。谢谢你抽出时间。