Czytam dane z NSFileHandle
(ze NSPipe
) stosując readabilityHandler
bloku:Jak sprawdzić koniec pliku za pomocą odczytuHandler NSFileHandle?
fileHandle.readabilityHandler = ^(NSFileHandle *handle) {
[self processData: [handle availableData]];
}
Działa to dobrze, mam wszystkie dane spodziewam Fed do mojego sposobu processData
. Problem polega na tym, że muszę wiedzieć, kiedy przeczytano ostatni fragment danych. availableData
powinien zwrócić pustą instancję NSData
, jeśli osiągnęła koniec pliku, ale problem polega na tym, że procedura obsługi osiągów nie jest ponownie wywoływana w EOF.
Nie mogę znaleźć informacji o tym, jak uzyskać powiadomienie lub oddzwonienie w EOF. Więc czego mi brakuje? Czy Apple naprawdę udostępnia asynchroniczny interfejs API do czytania bez wywołania zwrotnego EOF?
Nawiasem mówiąc, nie mogę użyć metody opartej na runloopie readInBackgroundAndNotify
, ponieważ nie mam dostępnego runloopa. Jeśli nie uda mi się uzyskać tego z interfejsem API NSFileHandle
, prawdopodobnie użyję źródła wysyłki do wykonania IO.
Czy na pewno wszystko napisać końce rury były zamknięte? Jeśli chodzi o pętle uruchomieniowe, wszystkie wątki utworzą pętlę uruchamiania na żądanie i można uruchomić ją samodzielnie. –
Tak, rura jest prawidłowo zamknięta. Zrobiłem jeszcze kilka eksperymentów i to samo dzieje się z innymi rodzajami instancji 'NSFileHandle'. Podczas odczytu ze standardowego wejścia lub zwykłego pliku nie ma również powiadomienia o EOF. – Sven