2014-01-11 49 views
0

我目前正在爲iPad應用程序在XCode中使用Multipeer Connectivity Framework。類型檢查:如何檢查NSData是否是NSArray?

我想與框架發送消息(NSString的,布爾& NSArrays)和字符串都工作正常,但我需要某種類型的檢查到NSData對象轉換爲字符串,陣列等

這是我的didReceiveData梅索德樣子:

- (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]; 
} 

我需要一些如果情況,所以我可以投的NSData對象成的NSString或NSArray的OR等

我怎樣才能解決這個問題?

提前致謝!

編輯:這是數組如何sended:

- (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];方法引發此異常:'NSInvalidArgumentException',原因:'*** - [NSKeyedUnarchiver initForReadingWithData:]:無法理解的檔案 –

+0

@DS:你用'NSKeyedArchiver'創建了數據嗎? –

+0

謝謝Martin!你是對的 - 字符串是用NSData * data = [message dataUsingEncoding:NSUTF8StringEncoding]創建的;顯然是錯的...... :) –