byte[] エントリなどのフィールドを含む .Net Web サービス応答があります。データはPDFファイルです。
[NSJSONSerialization JSONObjectWithData] を使用して、受信したデータから Dictionary を抽出します。
これ以降、次のコードを使用して byte[] を NSData に変換します。次に、結果をディスクに保存します (最後の行を参照)。
結果の PDF ファイルを開くと、次のエラーが表示されます。
「PDF ヘッダーが見つかりませんでした: `%PDF' が見つかりません。」
NSArray *byteArray = [rootDictionary objectForKey:@"file"];
unsigned c = byteArray.count;
uint8_t *bytes = malloc(sizeof(*bytes) * c);
unsigned i;
for (i = 0; i < c; i++)
{
NSString *str = [byteArray objectAtIndex:i];
int byte = [str intValue];
bytes[i] = (uint8_t)byte;
}
NSData* data = [NSData dataWithBytes:(const void *)byteArray length:sizeof(unsigned char)*c];
//Save to disk using svc class.
NSString *localPath = [svc saveReport:data ToFile:[rootDictionary objectForKey:@"name"]];
また、byte[] を base64 NSString (サービス側) に変換してから、アプリで NSData に戻そうとしましたが、(**ほとんど) うまくいきましたが、それはずさんなコードだと言われました。
** 複数の PDF を同時に非同期で取得すると、base64 文字列として受信したこれらのレポートの一部も破損していました。
PS。私の svc クラスからもコードを提供する必要があるかどうか教えてください。ただし、問題はないと思います。
編集: byte[]を入力として受け取る新しいWebサービスメソッドを作成し、iOSアプリを変更して、byteArray変数をサービスに送り返し、そこでファイルに保存しました。結果の PDF ファイルは、アドビが読み取り可能な有効なファイルです。転送中に破損がないことを意味します。
ありがとうございました!