2016-05-19 5 views
1

を使用してPHPで生成されたのObjective Cでのplistファイルを開くことができません。ファイルは、文でPHPで生成されました:は、私はシリアル化されたplistを含むバイナリファイルを持っているCFPropertyList

6270 6c69 7374 3030 D301 0203 0405 0651 6151 6251 6355 6170 6556 706C 6261 6e61の6e61:simple_array.plistファイルの

バイナリ内容は

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); 
A307 0809 5178 5179 517A 080F 1113 151B 2226 282A 0000 0000 0000 0101 0000 0000 0000 000A 0000 0000 0000 0000 0000 0000 0000 002C

私はsimple_arrを開くことができますXcodeのay.plist(問題なくダブルクリック)

私はまた、再オープンすることができ、それを後からPHPでの問題もなく、次のステートメントを使用して:

$plist = new CFPropertyList($plist_filename, CFPropertyList::FORMAT_BINARY); 

問題は、私は客観Cでファイルを開こうとすると、これらは私が文ですです使用:

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

fileInfoArraynilです!

これらの最後の2つのステートメントは(Linux上)PHPで生成されたファイルのObjective Cではなく、生成された他のplistファイルを開きます。

ここで何が起こっているのでしょうか?このWebページhttp://nshipster.com/nscoding/は、NSKeyed ArchiverのNSCodingの重要性について話しています...それは関連性がありますか?もしそうなら、私はどのようにPHPに適用できますか?

答えて

3

あなたはと辞書にplistのを読むことができます:

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfURL:fileURL]; 

それとも、NSPropertyListSerializationを使用することができます。

NSPropertyListFormat format; 
NSError *error; 
NSDictionary *dictionary = [NSPropertyListSerialization propertyListWithData:data options:0 format:&format error:&error]; 

そして、あなたのデータを、私のために働いた人々の両方で。詳細については

は、Property List Programming Guideを参照してください。

+0

答えてくれてありがとう、@Rob。それは私の問題を解決しました。 plistを配列に読み込むことがうまくいかなかった理由についても説明します。構造が複雑すぎます。 (私が扱っている実際のplistは非常に複雑です)。御時間ありがとうございます。 – Sleiman

関連する問題