1

曲名とアーティストを格納する NSMutableArray を作成しました。この配列を NSData 形式に変換して、テキスト ファイルに保存できるようにしようとしています。そうしようとすると、得られる出力は判読できません。

bplist00ÔghX$versionX$objectsY$archiverT$top † ¯$ !")-./3459:;?@AEFGKLMQRSWXY]^_cU$nullÒ R$0V$class€€#Ò ZNS.objectsª€€€ ...etc.

NSMutableArray から NSData に変換するために使用しているコードは次のとおりです。

NSFileManager *fm;

NSData *dataCache = [NSKeyedArchiver archivedDataWithRootObject:myList];

fm = [NSFileManager defaultManager];

if ([fm createFileAtPath:@"/users/nicholasvogler/desktop/Mysongs.txt" contents:dataCache  attributes:nil] == NO)

    {
        NSLog (@"Could not create data file");
        return 1;
    }

配列内のすべてのオブジェクトは NSStrings であり、文字列と配列に対して次のメソッドを追加しました。

-(void) encodeWithCoder:(NSCoder *)encoder
{

    [encoder encodeObject: songname];
    [encoder encodeObject: artist];
}
4

2 に答える 2

4

出力が正確に何であると期待していますか?あなたが持っているのはバイナリplistです。それが、アーカイブされたデータ (例: NSKeyedArchiver) が発行するものです。XML 形式もあり、 経由でアクセスできますがNSPropertyListSerialization、実際の plist 表現は実装の詳細であるため、アーカイブ データに XML 形式を使用する人はいません。

したがって、それが読み取り不能なバイナリ blob であるという事実にもかかわらず、それでも必要なものをエンコードしており、 で再度デコードできますNSKeyedUnarchiver

于 2012-12-12T02:00:29.373 に答える
0

配列内のすべてのオブジェクトが文字列(または文字列を含む辞書)である場合、JSONとして保存する方が理にかなっているように思われます。

于 2012-12-12T02:04:47.047 に答える