13

ブロックを使用してNSFileHandle(から) からデータを読み取っています。NSPipereadabilityHandler

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

processDataこれは正常に機能し、メソッドに供給されると予想されるすべてのデータを取得します。問題は、データの最後のチャンクがいつ読み取られたかを知る必要があることです。ファイルの終わりに達した場合availableDataは空のインスタンスを返す必要がありますが、問題は、EOF で到達可能性ハンドラーが再度呼び出されないことです。NSData

EOF で何らかの通知またはコールバックを取得する方法については何も見つかりません。それで、私は何が欠けていますか?Apple は本当に EOF コールバックなしで非同期読み取り API を提供していますか?

ちなみに、runloop が利用できないので、runloop ベースのreadInBackgroundAndNotify方法は使用できません。これをNSFileHandleAPI で動作させることができない場合は、おそらくディスパッチ ソースを直接使用して IO を実行します。

4

3 に答える 3

0

NSFileHandleを使用できない場合、これを行うのは運が悪いと思いますreadInBackgroundAndNotify

私が見る2つの解決策:

  1. 実行ループを作成してから使用しますreadInBackgroundAndNotify
  2. を使用して独自の実装を展開しますdispatch_io_*
于 2015-02-13T09:18:23.960 に答える