Ich lese Daten aus einem NSFileHandle
(von NSPipe
) unter Verwendung eines readabilityHandler
Block:Wie nach End-of-File mit NSFileHandle LesbarkeitHandler?
fileHandle.readabilityHandler = ^(NSFileHandle *handle) {
[self processData: [handle availableData]];
}
Dies funktioniert gut, ich alle Daten, erreiche ich meine processData
Methode gefüttert erwarten. Das Problem ist, dass ich wissen muss, wann der letzte Datenblock gelesen wurde. availableData
sollte eine leere NSData
Instanz zurückgeben, wenn es das Dateiende erreichte, aber das Problem ist, dass der Erreichbarkeitshandler nicht erneut bei EOF aufgerufen wird.
Ich kann nichts über eine Art von Benachrichtigung oder Rückruf auf EOF finden. Also was fehlt mir? Liefert Apple eine asynchrone Lese-API ohne EOF-Callback?
Übrigens kann ich nicht die Runloop basierte readInBackgroundAndNotify
Methode verwenden, da ich keinen Runloop verfügbar habe. Wenn ich das nicht mit der API NSFileHandle
arbeiten kann, werde ich wahrscheinlich direkt eine Versandquelle verwenden, um die IO zu tun.
Bist Du sicher alle Enden des Rohres schreiben geschlossen worden sind? In Bezug auf Run-Loops erstellen alle Threads bei Bedarf eine Run-Schleife, und Sie können selbst eine Run-Schleife ausführen. –
Ja, das Rohr ist richtig geschlossen. Ich habe etwas mehr experimentiert und dasselbe passiert auch mit anderen Arten von 'NSFileHandle'-Instanzen. Beim Lesen von der Standardeingabe oder einer regulären Datei gibt es auch keine Benachrichtigung für EOF. – Sven