2017-01-31 1 views
0

Si cette question a déjà été posée, veuillez m'en informer et nous supprimerons cette question. Cependant, je n'ai pas réussi à trouver quelqu'un répondant à cela.Comment voir quelle erreur spécifique se produit pendant la fonction d'écriture

J'utilise actuellement cette fonction: https://developer.apple.com/reference/foundation/outputstream/1410720-write

func write(_ buffer: UnsafePointer<UInt8>, maxLength len: Int) -> Int 

à écrire à un flux. Il renvoie un entier et, selon la documentation, cet entier est utilisé pour déterminer si les données ont été envoyées avec succès ou non:

  • Un nombre positif indique le nombre d'octets écrits.
  • 0 indique qu'un flux de longueur fixe a atteint sa capacité.
  • -1 signifie que l'opération a échoué; Plus d'informations sur l'erreur peuvent être obtenues avec streamError.

Je suis curieux de connaître le dernier. Dans mon code j'obtiens la valeur de cette erreur, qui est -1 dans mon cas. J'espère voir ce qui échoue spécifiquement. Mais comment puis-je obtenir un objet d'erreur d'un nombre entier?

Donc, fondamentalement, comment puis-je obtenir ceci: "plus d'informations sur l'erreur peuvent être obtenues avec streamError."

Merci.

EDIT:

Tout d'abord merci pour la réponse déjà. Cependant, j'ai fini par utiliser le code suivant:

for buffer in buffers { 
     let output = outputStream?.write((buffer.mData?.load(as: UnsafePointer<UInt8>.self))!, maxLength: Int(buffer.mDataByteSize)) 

     if output == -1 { 
      let error = outputStream?.streamError 
      print("\(#file) > \(#function) > Error: \(error?.localizedDescription)") 
     } 
    } 

Et il est impression que l'erreur est nulle.

+0

Quel type de flux est 'outputStream'? Avez-vous 'ouvert()' le flux avant d'y écrire? –

+0

@MartinR Oui, j'ai oublié d'ouvrir le flux. Avez-vous déjà vu l'erreur "L'opération n'a pas pu être complétée, mauvaise adresse"? – Logan

+0

Apparemment 'streamError' n'est pas défini si le flux n'a pas été ouvert. - Vous obtiendrez "mauvaise adresse" si le tampon ne contient pas une adresse valide. Exemple: 'let written = stream.write (UnsafePointer (bitPattern: 1) !, maxLength: 4)' –

Répondre

1

Les deux InputStream et OutputStream Hériter de Stream, qui a une streamError propriété:

Renvoie un objet NSError représentant l'erreur de flux.

Exemple simple:

let written = stream.write(buffer, maxLength: length) 
if written == -1 { 
    if let error = stream.streamError { 
    print(stream.streamError?.localizedDescription ?? "Unknown error") 
} 

Apparemment, il y a des cas où streamError n'est pas réglé après un échec écriture, par exemple si vous n'avez pas open() le flux.

+0

S'il vous plaît voir la modification dans ma question. – Logan