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.
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. –
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