6

从 OS X 10.7 和 iOS 5.0 开始,NSFileHandle 有两个新属性:readabilityHandler 和 writeabilityHandler。我尝试使用 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

嗯,你有我可以尝试的示例项目吗?即使在做嵌套处理程序之类的愚蠢事情时,我也没有遇到任何问题。显示它不起作用的测试用例可能有助于找出问题所在。

您可能遇到的一个问题是在 NSFileHandle 中使用 dispatch_io 会修改您传入的任何 fd 的属性。这可以说是 NSFileHandle 中的一个错误,但现在是这样:/

于 2012-01-17T06:53:10.107 回答