2016-07-24 5 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로 변환 할 수신기 측에서 그 디코딩? 이 프로젝트에 스위프트를 사용하고 있습니다.

답변

0

I는이 문제를 해결하는 또 다른 방법을 사용 를 발신자 측에서, 수신기 측에서 그것을를 디코드 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

구조체가 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

귀하의 의견에 전념하지 않습니다. –