2

Webサービスを介してOracleデータベースからObjectiveCにBLOBデータを送信しようとしています。BLOBデータは、Oracleデータベースに格納されているワードドキュメントです。

これまでに行ったことは次のとおりです。

  1. javajdbcを介してblobオブジェクトを取得します
  2. BLOBオブジェクトをJavaバイト配列に変換します
  3. このバイト配列をプレーンJavaオブジェクト(シリアル化)に設定し、Webサービスに送信します
  4. WebサービスはプレーンJavaオブジェクトをapplication/jsonとしてMedia-typeを使用してobjective-cに送信します
  5. jsonオブジェクトがObjective-cで取得され、バイト配列がNSDataに割り当てられます
  6. 次にNSDataがファイルに書き込まれ、ファイルが開かれます

問題:objective-cでファイルを開くことができず、Macでファイルを物理的に開くと、ジャンク文字が含まれています。ワードドキュメントを表すJavaバイト配列をObjective-Cで認識されるデータ型に変換し、最後にObjective-Cアプリでワードドキュメントを開くことができるかどうかを教えてください。

以下は、Objective-cの終わりを熟読するためのコードです。

注:コード内の「sourceDoc」はバイト配列のキーです。

NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

if ([data length] >0  && error == nil){

    NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    NSData *returnData = nil;

    for(NSDictionary *billDict in jsonArray){
        returnData = [NSData dataWithBytes:(__bridge const void *)([billDict objectForKey:@"sourceDoc"]) length:[[billDict objectForKey:@"sourceDoc"] length]];
        break;
    }
}
4

1 に答える 1

0

問題は-[NSData dataWithBytes:length:]、実際のデータへのポインターが必要ですが、辞書からオブジェクトを渡していることです。を使用して返された内容を調べる必要NSLog(@"%@", [billDict objectForKey:@"sourceDoc"]);がありますが、base64 文字列になると思います。base64 文字列の場合は、次の質問の base64 デコーディング オプションの 1 つを使用できます: How do I do base64 encoding on iphone-sdk? . その質問からの Alex Reynolds の回答を使用する場合はreturnData、上記のコードで作成して設定した base64 デコード ファイル ヘッダーを次のように含めます。

returnData = [NSData base64DataFromString:[billDict objectForKey:@"sourceDoc"]];
于 2012-12-19T00:24:04.360 に答える