2016-07-24 49 views
0

我需要使用MultipeerConnectivity將圖像和一些字符串數組發送到另一個設備。在接收端,API是func session(session: MCSession, didReceiveData data: NSData, fromPeer peerID: MCPeerID),它只收到NSData數據。但我需要發送這樣的事情:如何將這幾種不同的值類型結合到NSData中?

struct data{ 
var imageData:NSData? 
var location:[String:String]? 
var information:[String]? 
var sliderInfo:[String]? 
var questionsAndAnswer:[String:String]? 
var secrets: String? 
var tempts: Int? 

} 

有數據結構的內部許多不同的值類型,但我怎麼轉換這個自定義的數據結構來NSData然後解碼是在接收端?我正在使用Swift進行這個項目。

回答

0

我用另一種方式來解決這個問題: 發送側,發送Dictionary:[String:[String]],編碼和解碼是在接收端。對於NSData,我再次發送。從其他數據中提取它。

 let imageData = UIImageJPEGRepresentation(self.detailImage!, 1.0) 

     let msg = ["clickHidenInfo":[clickHidenInfo],"swipeInfo":upDownLeftRight,"sliderInfo":slideHiddenInforation,"locationInfo":["x1,y1,info","x2,y2,info"],"qa":["what's your name","Jerry"],"hints":["hints I provide"],"tempts":["tempts you can use"]] 



//sender: 
     let msgData = NSKeyedArchiver.archivedDataWithRootObject(msg) 

     do 
     { 
      try self.session?.sendData(imageData!, toPeers: (self.session?.connectedPeers)!, withMode: .Unreliable) 
      print("succee") 
     } 
     catch{ 
      print("failure") 
     } 

     do 
     { 
      try self.session?.sendData(msgData, toPeers: (self.session?.connectedPeers)!, withMode: .Unreliable) 
      print("succee") 
     } 
     catch{ 
      print("failure") 
     } 
//receiver side 
dispatch_async(dispatch_get_main_queue()){ 


     let dict = NSKeyedUnarchiver.unarchiveObjectWithData(data) 
     if dict == nil 
     { 
      self.guessImage.image = UIImage(data: data) 
      self.guessImage.reloadInputViews() 
     } 
     else 
     { 
      let result = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? Dictionary<String,[String]> 
      let a = result!["swipeInfo"] 
      print("\(a![0])") 
     } 


    } 
3

如果您將此設置爲採用NSCoding的NSObject子類,您將會有更輕鬆的時間。 NSCoding和NSKeyedArchiver是如何將任意數據序列化到NSData,然後再獲取任意數據。

+0

你的意思是讓結構像這樣:struct data:NSCoding {/ * something * /}? –

+0

您無法使Struct符合NSCoding。它必須是一個NSObject子類。 –

+0

「你的意思是讓結構像這樣」不,這不是我說的。我說NSObject的子類。這是一個類,而不是一個結構。你需要在這裏獲得可可的幫助;你不能用Swift結構來做到這一點。 – matt

-2
NSMutableDictionary *mutDic = [NSMutableDictionary dictionary]; 
[mutDic setValue:data.imageData forKey:@"imageData"]; 
[mutDic setValue:data.location forKey:@"location"]; 
[mutDic setValue:data.information forKey:@"information"]; 
[mutDic setValue:data.sliderInfo forKey:@"sliderInfo"]; 
+0

這不是我要發表你的評論。 –

相關問題