2

NSArrayorなどの目的の c オブジェクトをオブジェクトに変換し、それを使用してディスクに書き込むことができるようにしたいと考えてUIImageNSDataます。最初に に変換し、NSValue次に に変換する予定でしたNSDataこの質問は答えの一部を提供しましたが、彼らは で作業しNSNumberていたので、実際に に戻す必要はありませんでしたNSValue

に依存するこのような他の質問を見てきましNSKeyedArchiverたが、発生する膨大なサイズのインフレのために、これから離れたいと思います.

NSDataしたがって、最初の質問から、 からオブジェクトをエンコードするための現時点での私のコードNSValueは次のとおりです。

+(NSData*) dataWithValue:(NSValue*)value {

    NSUInteger size;

    const char* encoding = [value objCType];
    NSGetSizeAndAlignment(encoding, &size, NULL);

    void* ptr = malloc(size);
    [value getValue:ptr];
    NSData* data = [NSData dataWithBytes:ptr length:size];
    free(ptr);

    return data;
}

私の質問は、この方法でエンコードされたオブジェクトをデコードし、元のファイルを元に戻すにはどうすればよいですNSDataか?objCTypeNSValue

私はこれらの線に沿って何かを使用していると思います

[NSValue valueWithBytes:[data bytes] objCType:typeHere];

型情報を取得するにはどうすればよいですか?

4

2 に答える 2

1

あなたのアプローチは、NSValue 内のプリミティブ型 (int、float、ポインターのない構造体など) に対してのみ機能します。そうしないと、無意味なポインター値しか取得できず、NSData オブジェクトの実際のデータは取得されません。

実際の型文字列も渡すには、NSData オブジェクト内でもこれを取得する方法を考え出す必要があります。不可能ではありませんが、実際の問題は解決しません。

zaph が示唆するようにキー付きアーカイバを使用する方がはるかに優れています。

于 2015-06-14T12:16:49.850 に答える
1

NSKeyedArchiverアイテムを保存しNSKeyedUnarchiver、オブジェクトを復元するために使用します。オブジェクトは に準拠する必要NSCodingがあり、コレクションの場合は、含まれるすべてのアイテムも に準拠する必要がありNSCodingます。

NSKeyedArchiverおよびNSCoderの Apple ドキュメントを参照してください。

于 2015-06-14T11:56:36.523 に答える