从 OS X 10.7 和 iOS 5.0 开始,NSFileHandle 有两个新属性:readabilityHandler 和 writeabilityHandler。我尝试使用 writeabilityHandler,但没有成功。文档很奇怪,看起来他们复制粘贴了 readabilityHandler 的描述并将单词 read 替换为 write。
根据文档,分配 block 最终应该调用 block 。它不是。
- (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'
我也尝试过一段一段地发送数据。运气不好。
有人成功使用过这个属性吗?
最佳答案
嗯,你有我可以尝试的示例项目吗?我没有遇到任何问题,即使在做嵌套处理程序等愚蠢的事情时也是如此。显示它不起作用的测试用例可能有助于找出问题所在。
您可能遇到的一个问题是,在 NSFileHandle 中使用 dispatch_io 会修改您传入的任何 fd 的属性。这可以说是 NSFileHandle 中的一个错误,但现在是这样:/
关于objective-c - 如何使用NSFileHandle的writeabilityHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7871061/