NSData(たとえば、<F60323 04A525 ... ... 6D3301>)は16進形式です。[NSData description]
その結果を得るためにメソッドを呼び出していると思います。シリアル化は不可能ではありませんが、シリアル化に使用することは想定されていません。(カスタムの16進数からデータへのコンバーターを作成する必要があります)
ネット経由でデータを転送する方法はたくさんあります。トランスポート層にHTTPを使用していると想定しています。これを行う方法を2つ挙げます
JSONの方法(より多くのデータ型をサポートしますが、plistでも機能します)
シリアル化するオブジェクトを、NSJSONSerializerがJSONに正常にシリアル化できるオブジェクトに変換するカスタムシリアライザーとデシリアライザーを記述します。
JSONに変換できるオブジェクトには、次のプロパティが必要です。
- 最上位オブジェクトはNSArrayまたはNSDictionaryです。
- すべてのオブジェクトは、NSString、NSNumber、NSArray、NSDictionary、またはNSNullのインスタンスです。
- すべての辞書キーはNSStringのインスタンスです。
- 数値はNaNまたは無限大ではありません。
参照:
HTTPを介した生のNSData
HTTPを介した(NSCodingからの)生のNSDataのアップロードは、通常、application/octet-streamのHTTPPOSTまたはmultipart/form-dataのいずれかを使用して行われます。
application / x-www-form-urlencodedなどの他の方法でPOSTする場合は、base64や16進数などのWeb対応エンコーディングにシリアル化する必要があります。Base64の使用をお勧めします。iOSにはBase64エンコーダーとデコーダーが付属していませんが、私はそれを作成しました(Matt ThompsonのAFNetworking実装に基づく)。他の人が私がレビューした同様のメソッドを書いたことを知っています。マットトンプソン(およびその後に派生したbase64デコーダーコード)はクリーンで読みやすく、ロジックが可能な限り少ないことがわかりました。
Objective-CでのBase64エンコーディングとデコーディングの実装
サーバーからデータを取得するときは、データが(base64またはhex)エンコードされている場合は、最初にデコードしてください。実装に応じて、デコードされたデータをJSON、プロパティリスト、またはNSCodingにシリアル化します。
基本的に、シリアル化の手順を逆にします。