2017-03-07 1 views
2

J'ai travaillé pour essayer d'obtenir Multipeer Connectivity fonctionnant dans notre application dans une période relativement courte. La plupart des choses se sont bien déroulées, mais nous avons maintenant un problème vraiment embarrassant.Multipeer Connectivity IOS: didFinishReceivingResourceWithName Gestion des erreurs (Crash)

Nous avons toutes les données transférées bien quand suivant le chemin heureux mais en essayant de mettre en œuvre la gestion des erreurs ... Ce qui se fait par la mise hors connexion Wi-Fi mi transfert .. Mon code ...:

Sharer:

func sendResource(data: Data?, name: String, fileName: String, peerId: MCPeerID){ 
     if data != nil{ 
      let url = createTransferFile(jsonData: data!, name: fileName) 

      if url != nil{ 
       session.sendResource(at: url!, withName: name, toPeer: peerId, withCompletionHandler: { (error) -> Void in 
        if error != nil{ 
         NSLog("Error in sending resource send resource: \(error!.localizedDescription)") 
        } 
       }) 

      } 
     } 
    } 

récepteur:

func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID: MCPeerID, at localURL: URL, withError error: Error?) { 
     NSLog("%@", "didFinishReceivingResourceWithName: \(resourceName)") 
     if error != nil{ 
      NSLog("error in receiving") 
     } 
     if resourceName.contains("clinicDetails"){ 
      if error == nil{ 
       if let data = self.readClinicJsonFromFile(path: localURL){ 
        NSLog("passing to broadcast delegate") 
        sendDelegate?.addClinicDetails(self, clinicDetailsJSON: data) 

       }else{ 
        NSLog("there was an error in finding the retrieved file in clinic retrieve finished") 
        _ = Util.showAlert(retrievePatientDelegate as! UIViewController, code: 3021, actions: nil, isCustom: true) as! AlertController 
       } 
      }else{ 
       _ = Util.showAlert(retrievePatientDelegate as! UIViewController, code: 3021, actions: nil, isCustom: true) as! AlertController 
      } 
     }else if resourceName.contains("patients"){ 
      //NSLog("clinicId in retrievePatient: \(json["clinicId"])") 
      if error == nil{ 
       if let data = self.readPatientJsonFromFile(path: localURL){ 
        NSLog("passing to retrieve patients delegate") 
        retrievePatientDelegate?.addPatients(self, patientJSON: data , clinicId: resourceName.components(separatedBy: "/")[1]) 
       }else{ 
        NSLog("there was an error in finding the retrieved file in patient retrieve finished") 
        _ = Util.showAlert(retrievePatientDelegate as! UIViewController, code: 3021, actions: nil, isCustom: true) as! AlertController 

       } 
      }else{ 
       _ = Util.showAlert(retrievePatientDelegate as! UIViewController, code: 3021, actions: nil, isCustom: true) as! AlertController 
      } 
     }else if resourceName == "clinicList"{ 
      if error == nil{ 
       if let data = self.readClinicListJsonFromFile(path: localURL){ 
        NSLog("passing to retrieve retrieveDelegate") 
        retrieveDelegate?.addClinics(self, clinicsJSON: data["jsonData"] as! [[String:Any]], passcode: data["passcode"] as! String) 
       }else{ 
        NSLog("there was an error in finding the retrieved file in patient retrieve finished") 
        _ = Util.showAlert(retrievePatientDelegate as! UIViewController, code: 3021, actions: nil, isCustom: true) as! AlertController 
       } 
      }else{ 
       _ = Util.showAlert(retrievePatientDelegate as! UIViewController, code: 3021, actions: nil, isCustom: true) as! AlertController 
      } 
     } 
    } 

Les erreurs que nous recevons:

2017-03-06 16:52:54.416352 DC[2445:1444277] [GCKSession] Failed to send a DTLS packet with 78 bytes; sendmsg error: Can't assign requested address (49). 
2017-03-06 16:52:54.416560 DC[2445:1444277] [GCKSession] SSLWrite failed, packet was not sent for participant [05280B9E] channelID [4] DTLS context [0x103043ea0] pCList [0x10e94f960]; osStatus = -9803: errno = Can't assign requested address (49). 

Ces lignes impriment davantage en fonction de l'avancement.

Then we also get the following stack in xcode (je ne peux pas ajouter des images directement dans mes messages encore: <)

Stack Frame from the thread causing the error

+1

Pouvez-vous partager les cadres de la pile de cette trace? Quel code était exécuté par ce thread lorsqu'il s'est écrasé? –

+0

okay fera aussi vite – JoellyR

+0

que voulez-vous dire par des cadres de pile? voulez-vous que je vous envoie une capture d'écran de la session de débogage? ou y a-t-il un meilleur moyen de l'envoyer? @DaveWeston – JoellyR

Répondre

1

Il semble que ce bug est lié à un bogue dans le cadre de pommes en raison de la localURL dans la fonction didFinishReceivingResourceWithName n'étant pas optionnel. La valeur sur l'erreur ou la progression annulée est nulle. Je suis venu à cette conclusion après avoir regardé à travers chaque appel dans le fil de rupture puis trouver un SO Post