iphone - 如何从凹凸中使用多个 block 进行 NSKeyedUnarchiver ?

标签 iphone ios xcode nskeyedarchiver

遇到这个问题我想通过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/

相关文章:

android - 架构最佳实践 : Rails and Mobile/Web App

ios - Xcode 11.2,Catalina和Flutter v1.9.1 + hotfix.6之后出现 Unresolved iOS构建错误

ios - 将库导入 Xcode 7 项目

iOS 11,当用户强行杀死时应用程序不更新位置

ios - UIView animateWithDuration 重新开始

ios - Xcode:libpods.a 是红色的

iphone - 大 512 图标的图标闪耀问题

javascript - 为 ios 构建应用程序(react-native)

iphone - 性能问题 - iOS 中的 plist 与 sqlite

iphone - 可以使用 MapKit 在 map 上添加叠加层吗?