6

OS X 10.7 および iOS 5.0 以降、NSFileHandle には、readabilityHandler と writeabilityHandler という 2 つの新しいプロパティがあります。writeabilityHandler を使用しようとしましたが、うまくいきませんでした。ドキュメントは奇妙です。 readabilityHandler の説明をコピーして貼り付け、readという単語をwriteに置き換えたようです。

ドキュメントによると、ブロックを割り当てると、最終的にブロックを呼び出す必要があります。そうではありません。

- (void)sendResponse:(NSData*)dataToSend
{
    _incomingHandle.writeabilityHandler = 
    ^(NSFileHandle* fileHandle)
    {
        [fileHandle writeData:dataToSend]; // exception is thrown here
        fileHandle.writeabilityHandler = nil;
    };
    // Above block is not called without this line:
    //[_incomingHandle writeData:dataToSend];
}

ハンドルに同期的に書き込もうとした場合にのみ呼び出されますが、[_incomingHandle writeData:dataToSend]これは意味がありません。呼び出された後、例外がスローされます: EXC_BAD_INSTRUCTION

*** Terminating app due to uncaught exception 'NSFileHandleOperationException', reason:
'*** -[NSConcreteFileHandle writeData:]: Resource temporarily unavailable'

また、データを少しずつ送信しようとしました。運がない。

このプロパティをうまく使用した人はいますか?

4

1 に答える 1

0

うーん、試せるサンプル プロジェクトはありますか? 入れ子のハンドラーのようなばかげたことをしている場合でも、問題はありませんでした。機能していないことを示すテスト ケースは、何が問題なのかを理解するのに役立つ場合があります。

発生する可能性のある問題の 1 つは、NSFileHandle 内で dispatch_io を使用すると、渡した fd のプロパティが変更されることです。これはおそらく NSFileHandle のバグですが、今のところ当てはまります :/

于 2012-01-17T06:53:10.107 に答える