Подтвердить что ты не робот

Как проверить конечный файл с помощью NSFileHandle readabilityHandler?

Я читаю данные из NSFileHandle (из NSPipe) с помощью блока readabilityHandler:

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

Это отлично работает, я получаю все данные, которые, как я ожидаю, передал моему методу processData. Проблема в том, что мне нужно знать, когда был прочитан последний фрагмент данных. availableData должен возвращать пустой экземпляр NSData, если он достиг конца файла, но проблема в том, что обработчик достижимости снова не вызывается на EOF.

Я не могу найти что-либо о том, как получить какое-то уведомление или обратный вызов в EOF. Так что я пропущу? Является ли Apple действительно асинхронным API чтения без обратного вызова EOF?

Кстати, я не могу использовать метод readInBackgroundAndNotify на основе runloop, так как у меня нет доступной runloop. Если я не могу заставить это работать с API NSFileHandle, я, вероятно, буду напрямую использовать источник отправки для ввода IO.

4b9b3361

Ответ 1

Я боюсь, что вам не повезло с этим NSFileHandle, если вы не можете использовать readInBackgroundAndNotify.

Два решения, которые я вижу:

  • Создайте runloop, а затем используйте readInBackgroundAndNotify.
  • Создайте собственную реализацию, используя dispatch_io_*