类型检查:如何检查NSData是否是NSArray?
我目前正在为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];
}
你可以使用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 ...
}
感谢您的建议!但不知何故,id receivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:data];方法引发此异常:'NSInvalidArgumentException',原因:'*** - [NSKeyedUnarchiver initForReadingWithData:]:无法理解的档案 –
@DS:你用'NSKeyedArchiver'创建了数据吗? –
谢谢Martin!你是对的 - 字符串是用NSData * data = [message dataUsingEncoding:NSUTF8StringEncoding]创建的;显然是错的...... :) –
在发送方如何创建数据(从字符串,布尔,数组,...)? –
我添加了发送数组的方法... –
如果您只发送一个数组,您为什么还会收到其他任何内容(缺少一些数据)? –