どのように私はNSPropertyListXMLFormat_v1_0形式でNSKeyedArchiverを使用してファイルにオブジェクトをシリアル化しますか?
-
05-09-2019 - |
質問
うまくいけば、そのタイトルが十分に明確です。とにかく、それはそうです:
[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"];
}
所属していません StackOverflow