2013-10-25 4 views
3

내 응용 프로그램에 멀티 페어 연결 프레임 워크를 구현하려고합니다.멀티 페어 연결을 사용하는 장치간에 모든 데이터 형식 전달

나는 이것을 성공적으로 수행했다. 사용자가 할 수있게하려면 카메라 롤에서 사진과 같은 것을 선택하여 연결된 다른 장치로 전달해야합니다. 나는 UIImage뿐만 아니라 다른 것들과 함께하고있다. (예 : NSString, NSObject ...)

이상적으로, 나는 그것을 사용하고 다음 중 하나를 사용하여 그것을받을 수 있어야한다. 두 가지 방법 :

- (void)session:(MCSession *)session didReceiveStream:(NSInputStream *)stream withName:(NSString *)streamName fromPeer:(MCPeerID *)peerID; 

또는

- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID { 

내가 원하는 무엇, 그러나, multipeer 연결을 사용하여 다른 장치에 이상 통과 (모든 객체 유형에 대한) 표준화 된 방법입니다.

내 생각은 각 개체를 NSData로 변환 한 다음 전달하는 것이지만 수신 측에서 작동하지 않습니다. 내 테스트 :

NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:self.myImage]; 
NSLog(@"%@", myData); 

그렇다면 다시 변환하는 방법을 모르겠다. NSCoding과 관련이 있습니까 ?? 어떤 아이디어라도 높이 평가할 것입니다! :) 고맙습니다!!

답변

3

올바른 생각이 들리면 데이터 수신시 NSKeyedUnarchiver를 사용해야합니다.

- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID { 

    id myObject = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
} 

거기에서 당신은 당신이 실제로받은 객체의 종류를 판별 할 수 있습니다

if ([myObject isKindOfClass:[SomeClass class]]){ 

    //Handle 
} 

이 오래가 NSCoding 프로토콜을 준수으로, 모든 클래스에 대해 작동합니다. 살펴보기 : Encoding and Decoding Objects

3

내가 제안하는 것은 장치간에 NSData 개체를 전송하기위한 프로토콜을 구현하는 것입니다. 장치간에 표준화 된 패킷을 보내십시오. 예 :

유형 및 길이는 정수 여야하므로 상대방에게 도달 할 때 정확히 얼마나 큰지 알 수 있습니다. 길이는 실제 패킷의 길이를 알려줍니다.

// method received "(id) data" which can be UIImage, NSString, NSDictionary, NSArray 

// 1 -> Image 
// 2 -> JSON 
uint32_t type; 

if ([data isKindOfClass:[UIImage class]]) { 
    data = UIImageJPEGRepresentation((UIImage *)data, 1.0); 
    type = 0; 
} else { 
    data = [data JSONData]; 
    type = 1; 
} 

uint32_t length = [data length]; 

NSMutableData *packet = [NSMutableData dataWithCapacity:length + (INT_32_LENGTH * 2)]; 
[packet appendBytes:&type length:INT_32_LENGTH]; 
[packet appendBytes:&length length:INT_32_LENGTH]; 
[packet appendData:data]; 

간단한 예는 다음 다른 쪽 끝에서 당신은 패킷의 길이가 유형을 확인하고 올바른 개체 형식으로 다시 변환 읽습니다. 이미지의 경우 바이너리 패킷으로 보내고 다른 것은 JSON으로 보냅니다.

희망이 있습니다.