2016-07-24 8 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

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にシリアル化し、後で任意のデータを取得する方法です。 、送信側 をDictionary:[String:[String]]を送信し、それを符号化し、受信側でそれをデコード:私はこの問題を解決する別の方法を使用

+0

構造体を次のようにしますか?struct data:NSCoding {/ * something * /}? –

+0

構造体を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

あなたのコメントを捧げるのは私のことではありません。 –

関連する問題