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'
また、データを少しずつ送信しようとしました。運がない。
このプロパティをうまく使用した人はいますか?