2014-01-11 1 views
0

저는 iPad 응용 프로그램의 Xcode에서 Multipeer Connectivity Framework을 사용하고 있습니다.유형 검사 : NSData가 NSArray인지 확인하는 방법은 무엇입니까?

나는 (NSStrings, 부울 & NSArrays) 프레임 워크로 메시지를 보낼 원하는 문자열은 잘 작동하고 있지만 나는 등 문자열, 배열,

에있는 NSData 객체를 변환 할-확인 유형의 일종 필요

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

    NSString *message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    NSMutableArray *recievedArray = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

    if ([message isEqualToString:@"PeerIsConnected"]) { 
     NSLog(@"Peer sended: Connected!"); 
     self.connectionIsOn = TRUE; 
     dispatch_async(dispatch_get_main_queue(),^{ 
      [self changeConnectionButton:TRUE]; 
     }); 

     NSLog(@"Connection is on (data received) : %@", (self.connectionIsOn) ? @"YES" : @"NO"); 
    } 

    if ([message isEqualToString:@"Disconnect"]) { 
     NSLog(@"Peer sended: Disconnect!"); 
     self.connectionIsOn = FALSE; 
     dispatch_async(dispatch_get_main_queue(),^{ 
      [self changeConnectionButton:FALSE]; 
     }); 
    } 


    if ([message isEqualToString:@"GoWasClicked"]) { 

     self.muliplayergameIsOn = TRUE; 
     self.myTurn = TRUE; 

     self.startDate = [NSDate date]; 
     self.stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 
                   target:self 
                  selector:@selector(updateTimer) 
                  userInfo:nil 
                   repeats:YES]; 
} 

내가 어떤 경우 그래서 만약 내가있는 NSString 또는있는 NSArray에있는 NSData 개체를 캐스팅 할 수 있습니다 또는

가 어떻게이 문제를 해결할 수 등이 필요합니다

이 내 didReceiveData 메도의 모습인가?

미리 감사드립니다.

편집 : 이것은 배열 발송에 실패하는 방법입니다 :

- (void) sendArray:(NSMutableArray *) arrayToSend{ 

    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arrayToSend]; 

    NSError *error; 
    [self.mySession sendData:data toPeers:[self.mySession connectedPeers] withMode:MCSessionSendDataUnreliable error:&error]; 

} 
+0

송신 측에서 데이터가 어떻게 생성됩니까 (문자열, 부울, 배열 등)? –

+0

배열이 전송되는 방법을 추가했습니다 ... –

+0

배열을 전송하는 경우 왜 다른 데이터가 수신됩니까? –

답변

1

당신은 (문자열, 배열, ...)를 보내 개체의 모든 종류의 NSKeyedArchiver를 사용할 수 있습니다. 그렇다면 수신 측에서 확인할 수 있습니다

id receivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 
if ([receivedObject isKindOfClass:[NSArray class]]) { 
    NSArray *receivedArray = receivedObject; 
    // handle array ... 

} else if ([receivedObject isKindOfClass:[NSString class]]) { 
    NSString *receivedString = receivedObject; 
    // handle string ... 
} 
+0

조언 주셔서 감사합니다! 그러나 어떻게 든 id receivedObject = [NSKeyedUnarchiver unarchiveObjectWithData : data]; methode 'NSKeyedUnarchiver initForReadingWithData :] : 이해할 수없는 자료실 –

+0

@DS : NSKeyedArchiver로 데이터를 생성 했습니까? –

+0

Martin 고맙습니다! 당신 말이 맞았습니다. 문자열은 NSData * data = [message dataUsingEncoding : NSUTF8StringEncoding]; 분명히 잘못 ... –