objective-c - 如何使用NSFileHandle的writeabilityHandler?

标签 objective-c ios5 objective-c-blocks osx-lion nsfilehandle

从 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/

相关文章:

ios - keychain iOS touchId 提示两次

ios - 如何使 UIToolbar 出现在 Storyboard 中以进行可视化编辑

iphone - 异步方法、 block 和 GCD,难以理解

ios - 使用 GCD 在 block 内赋值

iphone - UIWebView contentEditable 图像复制粘贴崩溃 (EXC_BAD_ACCESS)

ios - 如何处理人脸ID权限提醒?

ios - UIScrollView 中的 UICollectionView -> 滚动顺序

ios - 如何阻止自定义 UIStoryboardSegue 末尾的 "flashing" View ?

iphone - iOS静态库的向后兼容性

ios - block 内的静态变量