2013-03-05 32 views
1

使用Game Center,我們可以在通過藍牙連接的設備之間發送NSString值嗎?我們可以在通過藍牙連接的設備之間發送NSString值,使用Game Center

下面是我的一些代碼部分:

typedef enum { 
    messageType1 = 0; 
    messageType2 = 1; 
} 
messageType; 

typedef struct { 
    MessageType messageType; 
    NSString *myName; 
} MyMessage; 

而且在我的課我有這樣的方法來發送消息:

MyMessage myMessage; 
myMessage.messageType = messageType2; 
myMessage.myName = @"ABCDEFGH"; 
NSData *data = [NSData dataWithBytes:&myMessage length:sizeof(MyMessage)]; 
[self sendDataToAllPeers:data withDataMode:GKSendDataReliable error:error]; 

接收數據我有方法:

-(void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context{ 
    MyMessage myMessage = *((MyMessage *) [data bytes]); 
    type = myMessage.messageType; 
    name = myMessage.myName; 
} 

問題:我怎樣才能得到myName? (我能得到MessageType

回答

0

發送NSData的已歸檔的NSArray:

NSArray *array = [[NSArray alloc] initWithObjects:myMessage.messageType, myMessage.myName, nil]; 
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array]; 
[self sendDataToAllPeers:data]; 

接收的NSData和取消歸檔到的NSArray:

NSArray *array = [NSKeyedUnarchiver unarchiveObjectWithData: data]; 
type = [array objectAtIndex:0]; 
name = [array objectAtIndex:1]; 
+0

感謝ILYA2606。你的回答是對的,但它在我的應用程序中不起作用,因爲我以Struct和Enum的形式發送數據,如我的代碼所示。我不能以NSArray的形式發送數據(因爲數據太大,會影響我的應用程序的性能,例如MessageType是messageType1,messageType2,... messageType20,myMessage包含太多東西,還有一些Struct與MessageType)。 在接收端我使用 if(type = myMessage-> messageType) {執行一些任務,如打印myName} 我需要發送與所示相同格式的數據。 現在,我怎樣才能得到MyName(NSString) – Amit 2013-03-19 05:39:32

相關問題