2012-04-15 4 views
0

내가 범프를 통해 전송 된 이미지를 싶어이 문제가 발생하지만, API의 최대 덩어리가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]; 
    } 

어떻게 내가 모든 덩어리를 함께 컴파일 할 2백56킬로바이트 범프?

3 시간을 소비했지만 해결할 수 없습니다.

+1

왜 [NSKeyedArchiver archivedDataWithRootObject : self.selectedImg]'의 값을 변수에 할당하지 않으시겠습니까? 나는 데이터 객체를 만드는 것이 시스템 리소스에 대해 사소하지 않을 수도 있다고 생각한다. (또한, dlen/262144를 그냥 쓰면 어떨까요? – samson

+0

오류가 발생하여 데이터를 전송하고 있습니다. 괜찮습니다. 하지만 나는 장치의 다른면에서 돌아 오는 방법을 알아야합니다. – Desmond

+1

그런 식으로 읽기가 어렵습니다. – samson

답변

1

좋아, 나는 실제로 이것을 시도하지 않았다, 그러나 여기에 간다.

받는 쪽에서받은 NSData 개체를 가져 와서 -[NSMutableData appendData:] 또는 -[NSMutableData appendBytes:length:]의 NSMutableData 인스턴스에 집계합니다. (그런 다음 -[NSData bytes]에서 바이트 -[NSData length]

을 얻을 +[NSKeyedUnarchiver unarchiveObjectWithData:]를 사용하여 이미지를 다시 얻을.

을 ...이 (AN NSMutableData 속성을 설정해야처럼의)이 receivedImageData라고 가정 해 봅시다 ...

- (void) bumpDataReceived:(NSData *)chunk { 
    if (!self.receivedImageData) { 
     self.receivedImageData = [NSMutableData dataWithCapacity:[chunk length]]; 
     [self.receivedImageData setData:chunk]; 
    } else { 
     [self.receivedImageData appendData:chunk]; 
    } 
} 
마지막 덩어리를 얻을 때

... 그리고는, (그것의 크기는 -bumpSessionEnded:에? 262144 같지 않은?)로 다시 이미지 객체를 가져

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

완료!

+0

샘플 코드를 제공 할 수 있습니까? – Desmond

+1

@Desmond, 제 편집을 확인하십시오. – samson

+0

끝내, 그것은 일한다! !!!! 내 코드를 곧 게시 할 예정입니다. 감사합니다. 삼손 – Desmond