2013-04-06 10 views
11

Sto leggendo i dati da un NSFileHandle (da un NSPipe) utilizzando un blocco readabilityHandler:Come verificare la fine del file utilizzando la leggibilità di NSFileHandleHandler?

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

Questo funziona bene, ho tutti i dati mi aspetto Fed a mio metodo processData. Il problema è che ho bisogno di sapere quando è stata letta l'ultima porzione di dati. availableData dovrebbe restituire un'istanza vuota NSData se ha raggiunto la fine del file, ma il problema è che il gestore di raggiungibilità non viene richiamato di nuovo su EOF.

Non riesco a trovare nulla su come ottenere una sorta di notifica o richiamata su EOF. Quindi cosa mi sto perdendo? Apple fornisce davvero un'API di lettura asincrona senza un callback EOF?

A proposito, non posso usare il metodo basato su runloop readInBackgroundAndNotify poiché non ho uno runloop disponibile. Se non riesco a farlo funzionare con l'API NSFileHandle, probabilmente utilizzerò direttamente una fonte di invio per eseguire l'IO.

+0

Sei sicuro tutti Scrivi estremità del tubo sono stati chiusi? Per quanto riguarda i loop di esecuzione, tutti i thread creeranno un ciclo di esecuzione su richiesta ed è possibile eseguirne uno da soli. –

+0

Sì, il tubo è chiuso correttamente. Ho fatto altri esperimenti e la stessa cosa succede anche con altri tipi di istanze di 'NSFileHandle'. Quando si legge dallo standard input o da un file normale, non vi è alcuna notifica per EOF. – Sven

risposta

1

Ho paura che non si riesca a farlo con NSFileHandle se non è possibile utilizzare readInBackgroundAndNotify.

due soluzioni vedo:

  1. Creare un runloop e quindi utilizzare readInBackgroundAndNotify.
  2. rotolare il proprio implementazione utilizzando dispatch_io_*
Problemi correlati