0

この問題が発生しました。バンプを介して画像を送信したいのですが、バンプ API の最大チャンクは 256kb です。

 if([[NSKeyedArchiver archivedDataWithRootObject:self.selectedImg]length] > 262144)
    {
        int dlen = [[NSKeyedArchiver
                     archivedDataWithRootObject:self.selectedImg] length];
        NSLog(@"Sending data: %i bytes in %d chunks",dlen,
              (int)ceil(((float)dlen / 262144.0f)));
        for (int i=1; i <= (int)ceil(((float)dlen / 262144.0f)); i++) {
            int maxr=0;
            if ((262144*i) > dlen) {
                maxr = dlen-(262144*(i-1));
            } else {
                maxr = 262144;
            }

            NSData *moveChunk = [[NSKeyedArchiver
                                  archivedDataWithRootObject:self.selectedImg]
                                 subdataWithRange:NSMakeRange(262144*(i-1),maxr)];
            NSLog(@"Sending Chunk: %d, %d bytes",i,[moveChunk length]);
            [bumpObject sendData:moveChunk];
        }
    }
    else
    {
        //Data is 254kb or under
        NSData *moveChunk = [NSKeyedArchiver
                             archivedDataWithRootObject:self.selectedImg];
        [bumpObject sendData:moveChunk];
    } 

すべてのチャンクを一緒にコンパイルするにはどうすればよいですか?

3時間費やしましたが、解決できません。

4

1 に答える 1

1

わかりました、私は実際にこれを試していませんが、ここに行きます.

受信側では、受信した NSData オブジェクトを取得し、それらを-[NSMutableData appendData:]orを使用して NSMutableData のインスタンスにまとめます-[NSMutableData appendBytes:length:]。(からバイトを取得し-[NSData bytes]-[NSData length]

次に、 を使用してイメージを取得し+[NSKeyedUnarchiver unarchiveObjectWithData:]ます。

... このように (NSMutableData プロパティを設定し、 としましょうreceivedImageData) ...

- (void) bumpDataReceived:(NSData *)chunk {
    if (!self.receivedImageData) {
        self.receivedImageData = [NSMutableData dataWithCapacity:[chunk length]];
        [self.receivedImageData setData:chunk];
    } else {
        [self.receivedImageData appendData:chunk];
    }
}

...そして、最後のチャンクを取得すると (サイズが 262144? と等しくない-bumpSessionEnded:?)、次のコマンドで画像オブジェクトを取得します

UIImage* receivedImage = [NSKeyedUnarchiver unarchiveObjectWithData:self.receivedImageData];

終わり!

于 2012-04-15T10:44:43.823 に答える