2013-04-06 82 views
11

我使用的是readabilityHandler塊讀取從NSFileHandle(從NSPipe)數據:如何使用NSFileHandle的readabilityHandler檢查文件結束?

fileHandle.readabilityHandler = ^(NSFileHandle *handle) { 
    [self processData: [handle availableData]]; 
} 

這工作得很好,我得到的所有我預計美聯儲將我processData方法的數據。問題是我需要知道什麼時候讀取了最後一塊數據。 availableData應該返回一個空的NSData實例,如果它到達文件結尾,但問題在於EOF上沒有再次調用可達性處理程序。

我找不到任何關於如何獲得EOF的某種通知或回調。那麼我錯過了什麼?蘋果真的提供了一個沒有EOF回調的異步閱讀API嗎?

順便說一句,我不能使用基於readInBackgroundAndNotify方法的runloop方法,因爲我沒有可用的runloop。如果我不能使用這個API來處理NSFileHandle API,我可能會直接使用調度源來執行IO。

+0

你確定所有的寫管道的兩端已被關閉?關於運行循環,所有線程都會根據需要創建一個運行循環,您可以自己運行一個循環。 – 2013-04-06 14:20:33

+0

是的,管道已正確關閉。我做了一些更多的嘗試,其他種類的'NSFileHandle'實例也會發生同樣的情況。從標準輸入或常規文件讀取時,EOF也沒有通知。 – Sven 2013-04-06 14:55:01

回答

1

如果您不能使用readInBackgroundAndNotify,恐怕您運氣不好,請使用NSFileHandle

兩個解決方案,我看到:

  1. 創建runloop,然後使用readInBackgroundAndNotify
  2. 推出自己的實現使用dispatch_io_*