从OSX10.7和iOS 5.0开始,NSFileHandle有两个新的属性: readabilityHandler和writeabilityHandler。我试着使用writeabilityHandler,但没有运气。文档很奇怪,看起来它们复制粘贴了对readabilityHandler的描述,并将word read替换为 with 。
根据文档,分配块最终应该调用块。事实并非如此。
- (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];
}只有当我尝试同步写入句柄时才调用它,这是没有意义的。调用它之后,它会抛出一个异常: EXC_BAD_INSTRUCTION
*** Terminating app due to uncaught exception 'NSFileHandleOperationException', reason:
'*** -[NSConcreteFileHandle writeData:]: Resource temporarily unavailable'我还试着把数据一片片地发送出去。不走运。
有人成功地使用了这个属性吗?
发布于 2012-01-17 06:53:10
嗯,你有我可以尝试的项目样本吗?我对它没有任何问题,即使在做像嵌套处理程序这样愚蠢的事情时也是如此。一个测试用例显示它不起作用可能有助于找出问题所在。
您可能遇到的一个问题是,在dispatch_io中使用NSFileHandle将修改您传入的任何fd的属性。这可以说是NSFileHandle中的一个bug,但目前是正确的:/
https://stackoverflow.com/questions/7871061
复制相似问题