どのように私はNSPropertyListXMLFormat_v1_0形式でNSKeyedArchiverを使用してファイルにオブジェクトをシリアル化しますか?

StackOverflow https://stackoverflow.com/questions/726053

質問

うまくいけば、そのタイトルが十分に明確です。とにかく、それはそうです:

[NSKeyedArchiver archiveRootObject:rootObject toFile:path];

NSPropertyListBinaryFormat_v1_0に制限されます。

私は[XMLので]人間が読むことができるようにフォーマットする必要があります。あなたが興味を持っている場合、これは私が最終的に

「どのようにユニットテストGPSアプリケーションへ」についてのブログ記事でgithubの上に置きますプロジェクトの一部であります

: - )

役に立ちましたか?

解決

あなたはそれを変換するためにNSPropertyListSerializationを使用する必要があります。基本的に、あなたはシリアル化しているオブジェクトがmyObjectと呼ばれ、究極のファイルがmyPathに保存されている、あなたは次のコードのようなものを使用してXMLにそれをシリアライズだろうと仮定します:

NSString *error = nil;
NSData *mySerializedObject = [NSKeyedArchiver archivedDataWithRootObject:myObject];
NSData *xmlData = [NSPropertyListSerialization dataFromPropertyList:mySerializedObject
                        format:NSPropertyListXMLFormat_v1_0
                        errorDescription:&error]:
if( xmlData ) {
    [xmlData writeToFile:myPath atomically:YES];
} else {
    NSLog(error);
    [error release];
}

他のヒント

の代わりにクラスのメソッドを使用する、NSKeyedArchiverのインスタンスを作成し、XML形式を指定するsetOutputFormat:NSPropertyListXMLFormat_v1_0を使用してみてください。唯一の欠点は、実際にシリアライズを処理するので、それは、コードのいくつかの余分なラインを取るよ、それだけで1つのステップでNSDataオブジェクトを返しませんです。

あなたは、メソッドを使用して、オブジェクトのクラスをエンコードする必要があります - (ボイド)encodeWithCoder(NSCoder *)エンコーダ{

[coder encodeObject:name forKey:@"name"];
[coder encodeObject:address forKey:@"address"];
[coder encodeObject:position forKey:@"position"];

}

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top