2012-04-15 65 views
0

遇到这个问题,我想通过凹凸发送的图像,但磕碰API的最大块为256KB如何NSKeyedUnarchiver与多块来自凹凸?

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小时,但解决不了。

+1

为什么不将'[NSKeyedArchiver archivedDataWithRootObject:self.selectedImg]'的值赋给变量?我认为创建一个数据对象在系统资源上可能并不是微不足道的......(另外,你为什么不直接使用'dlen/262144'?不管怎样,整数分割都会被截断)。 – samson 2012-04-15 10:22:41

+0

这是发送数据,这很好。但我需要知道如何从设备的另一侧恢复 – Desmond 2012-04-15 10:40:36

+1

这很难以这种方式阅读。 – samson 2012-04-15 10:45:12

回答

1

好的,我没有真的尝试过这个,但是在这里。

在接收端,以接收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]; 
    } 
} 

...然后,当你拿到最后一块(它的大小不等于262144?在-bumpSessionEnded:?)获取图像对象回来

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

完成!

+0

你能给出一个示例代码? – Desmond 2012-04-15 10:56:03

+1

@Desmond,检查我的编辑。 – samson 2012-04-15 12:22:42

+0

真棒,它的作品! 很快就会发布我的代码! 谢谢参孙 – Desmond 2012-04-15 14:02:01