遇到这个问题我想通过bump发送图像,但是bump 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];
}
如何将所有 block 编译在一起?
花了3个小时,还是没解决。
最佳答案
好吧,我还没有真正尝试过这个,但这里是。
在接收端,获取接收到的 NSData 对象,并将它们聚合到 NSMutableData 的实例中 -[NSMutableData appendData:]
或-[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];
}
}
...然后,当你得到最后一个 block (它的大小不等于 -bumpSessionEnded:
中的 262144??)时,使用
UIImage* receivedImage = [NSKeyedUnarchiver unarchiveObjectWithData:self.receivedImageData];
完成!
关于iphone - 如何从凹凸中使用多个 block 进行 NSKeyedUnarchiver ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161128/