2016-11-02 37 views
0

的一部分我已經創建的對象與多個屬性來發送:1串(SESSIONDATE),另一個對象的陣列,1個時間間隔和1個INT(sessiondistance)。我使用多重連接發送此對象,並且設備註冊它們正在接收數據。但是,整數不被接收。它在接收設備上變爲零。IOS Multipeer連通性 - 僅發送我的對象

感謝您的幫助!

This is the relevant code

FUNC會話(_會話:MCSession,對等體的peerID:MCPeerID,didChange狀態:MCSessionState){ 開關狀態{ 情況MCSessionState.connected: 打印( 「連接:(peerID.displayName)」 )

 joinedSession = true 
     let hosting = ViewController().hostCheck() 
     print("InMCSessionConnected") 
     if(hosting == false){ 

     } 
     if(hosting == true){ 


      if(self.ConnectedUsers.text?.range(of: peerID.displayName) == nil){ 
       DispatchQueue.main.async { 
       self.ConnectedUsers.text?.append(peerID.displayName + ", ") 
       } 
      } 

      HostingSession.noJoined = HostingSession.noJoined + 1; 
      print(HostingSession.noJoined) 

      print(SessionsManager.SessionInception.last?.SessionDistance) 
      print(SessionsManager.SessionInception.last?.SessionDate) 
      print("SendingData") 
      sendData(SessionsManager.SessionInception.last!) 
      print("SendingData") 

     } 


    case MCSessionState.connecting: 
     print("Connecting: \(peerID.displayName)") 

    case MCSessionState.notConnected: 
     print("Not Connected: \(peerID.displayName)") 
     joinedSession = false 

    } 
} 
func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) { 
    //This is called when data arrives 
    print("Starting Received Data") 

    let hosting = ViewController().hostCheck() 
    if(hosting == false){ 

    let SessionSent = (NSKeyedUnarchiver.unarchiveObject(with: data) as! Sessions) 
    print(SessionSent.SessionDistance) 

    SessionsManager.SessionInception.append(SessionSent)//appends the session sent 
    //2 method gets the current date and line below appends this date to title 
    let currentSession = SessionsManager.SessionInception.last 
    let currentSessionDate = (currentSession?.SessionDate)! 
    print(currentSessionDate) 
    reloadView() 

    //Creates the table 
    TableView.rowHeight = 90 
    TableView.delegate = self 
    TableView.dataSource = self 
    TableView.reloadData() 

    print("Finished Received Data") 
     //ReadyButton.enabled = true 
    } 
} 
+0

請發表您的代碼作爲文本 – Prisoner

回答

0

所以最後我通過單獨發送對象的每個部分得到了這個工作。請看下圖:

func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) { 
    switch state { 
    case MCSessionState.connected: 
     print("Connected: \(peerID.displayName)") 

     joinedSession = true 
     let hosting = ViewController().hostCheck() 
     print("InMCSessionConnected") 
     if(hosting == false){ 

     } 
     if(hosting == true){ 


      if(self.ConnectedUsers.text?.range(of: peerID.displayName) == nil){ 
       DispatchQueue.main.async { 
       self.ConnectedUsers.text?.append(peerID.displayName + ", ") 
       } 
      } 

      HostingSession.noJoined = HostingSession.noJoined + 1; 
      print(HostingSession.noJoined) 

      print(SessionsManager.SessionArray.last?.SessionDistance) 
      print(SessionsManager.SessionArray.last?.SessionDate) 
      print("SendingData") 
      sendData(SessionsManager.SessionArray.last!) 
      print("SendingData") 
      //MARK: Work around 
      sendDistance(SessionsManager.SessionArray.last!.SessionDistance!) 
      sendStartTime((SessionsManager.SessionArray.last?.startTime)!) 
     } 


    case MCSessionState.connecting: 
     print("Connecting: \(peerID.displayName)") 

    case MCSessionState.notConnected: 
     print("Not Connected: \(peerID.displayName)") 
     joinedSession = false 

    } 
} 
func session(_ session: MCSession, didReceive data: Data, fromPeer peerID: MCPeerID) { 
    //This is called when data arrives 
    print("Starting Received Data") 
    let hosting = ViewController().hostCheck() 
    if(hosting == false){ 

    if let SessionSent = (NSKeyedUnarchiver.unarchiveObject(with: data) as? Sessions) { 


    SessionsManager.SessionArray.append(SessionSent)//appends the session sent 
    //2 method gets the current date and line below appends this date to title 
    let currentSession = SessionsManager.SessionArray.last 
    let currentSessionDate = (currentSession?.SessionDate)! 
    print(currentSessionDate) 
    reloadView() 

    //Creates the table 
    TableView.rowHeight = 90 
    TableView.delegate = self 
    TableView.dataSource = self 
    TableView.reloadData() 
     }//MARK: Work around 
     else if let distanceSent = (NSKeyedUnarchiver.unarchiveObject(with: data) as? Int) { 
     if (distanceSent < 100000){ 
     SessionsManager.SessionArray.last?.SessionDistance = distanceSent 
     print(SessionsManager.SessionArray.last?.SessionDistance) 


     }else{ 
     SessionsManager.SessionArray.last?.startTime = TimeInterval(distanceSent) 
     print(SessionsManager.SessionArray.last?.startTime) 
     } 
     } 
    print("Finished Received Data") 
     //ReadyButton.enabled = true 
    } 
} 

這些都是發送子程序:

//MARK: Work around 
func sendDistance(_ TheData: Int){ 
    let dataToSend = NSKeyedArchiver.archivedData(withRootObject: TheData) 

    if mcSession.connectedPeers.count > 0 {//makes sure it is actually sending it to any peers before it attempts 
     do { 
      try mcSession.send(dataToSend, toPeers: mcSession.connectedPeers, with: .reliable)//Ensures delivery using reliable method, sends dataToSend to all peers connected on mcSession.connectedPeers 

     } catch let error as NSError {//Shows an error message if there is a problem 
      print(error) 
     } 



    } 

} 

func sendStartTime(_ TheData: TimeInterval){ 
    let dataToSend = NSKeyedArchiver.archivedData(withRootObject: TheData) 

    if mcSession.connectedPeers.count > 0 {//makes sure it is actually sending it to any peers before it attempts 
     do { 
      try mcSession.send(dataToSend, toPeers: mcSession.connectedPeers, with: .reliable)//Ensures delivery using reliable method, sends dataToSend to all peers connected on mcSession.connectedPeers 

     } catch let error as NSError {//Shows an error message if there is a problem 
      print(error) 
     } 



    } 



    } 

func sendData(_ TheData: NSObject){ 
    let dataToSend = NSKeyedArchiver.archivedData(withRootObject: TheData) 
    if mcSession.connectedPeers.count > 0 {//makes sure it is actually sending it to any peers before it attempts 
      do { 
       try mcSession.send(dataToSend, toPeers: mcSession.connectedPeers, with: .reliable)//Ensures delivery using reliable method, sends dataToSend to all peers connected on mcSession.connectedPeers 
      } catch let error as NSError {//Shows an error message if there is a problem 
       print(error) 
      } 



    }