2017-01-31 20 views
0

Если этот вопрос задан раньше, сообщите мне, и я удалю этот вопрос. Однако я не смог найти ответ на этот вопрос.Как увидеть, какая ошибка возникает во время записи

настоящее время я использую эту функцию: https://developer.apple.com/reference/foundation/outputstream/1410720-write

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

писать в поток. Он возвращает целое число, и в соответствии с документацией это целое используется для определения того, были ли данные отправлены успешно или нет:

  • Положительное число указывает количество записанных байтов.
  • 0 указывает, что поток фиксированной длины и достиг своей емкости.
  • -1 означает, что операция не удалась; более подробную информацию об ошибке можно получить с помощью streamError.

Мне любопытно узнать о последнем. В моем коде я получаю значение этой ошибки, которая равна -1 в моем случае. Я надеюсь увидеть, что конкретно не удается. Но как получить объект ошибки из целого числа?

Так как я могу получить это: «дополнительную информацию об ошибке можно получить с помощью streamError».

Спасибо.

EDIT:

Во-первых спасибо за уже ответ. Тем не менее, я закончил использовать следующий код:

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)") 
     } 
    } 

И печатает, что ошибка равна нулю.

+0

Какой поток является 'outputStream'? Вы открыли() 'поток перед тем, как писать на него? –

+0

@MartinR Да, я забыл открыть поток. Вы когда-нибудь видели ошибку «Операция не может быть выполнена. Плохой адрес»? – Logan

+0

По-видимому, 'streamError' не установлен, если поток не был открыт. - Вы получите «плохой адрес», если буфер не содержит действительного адреса. Пример: 'let written = stream.write (UnsafePointer (bitPattern: 1) !, maxLength: 4)' –

ответ

1

Оба InputStream и OutputStream наследоваться от Stream, который имеет с streamError свойством:

возвращает объект, представляющий NSError ошибку потока.

Простой пример:

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

Видимо есть случаи, когда streamError не установлен после неудачной записи, например, если вы не сделали open() поток.

+0

См. Изменение в моем вопросе. – Logan