2017-01-31 46 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獲得。」

謝謝。

編輯:

首先謝謝你的答案了。但是,我結束了使用下面的代碼:

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兩者並從StreamOutputStream繼承,它具有一個 屬性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

相關問題