2

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 ファイルは、アドビが読み取り可能な有効なファイルです。転送中に破損がないことを意味します。

ありがとうございました!

4

1 に答える 1

5

わかりました、私のコードを細かくコーミングした後、最終的にこれを整理しました( http://www.raywenderlich.com/forums/viewtopic.php?f=2&p=38590#p38590のsnadeep.gvnに触発されたように)。

私は100回以上見落としたばかげた間違いを犯しました。

このコード行:

NSData* data = [NSData dataWithBytes:(const void *)byteArray length:sizeof(unsigned char)*c];

次のように変更する必要があります。

NSData* data = [NSData dataWithBytes:(const void *)bytes length:sizeof(unsigned char)*c];

いい時間、やっと眠れるようになりました:-)

于 2013-03-25T10:13:16.267 に答える