我想使用 NSURLConnection
(和 NSURLRequest
)向服务器发送大量数据。为此,我创建了一对绑定(bind)的 NSStream(使用 CFStreamCreateBoundPair(...))。然后,我将输入流传递给 NSURLRequest
(-setHTTPBodyStream:
) 并在当前运行循环上安排输出流。当运行循环继续时,我收到发送数据的事件,并且输入流将此数据发送到服务器。
我的问题是,只有当数据适合成对流之间的缓冲区时,这才有效。如果数据较大,则输入流会以某种方式获取事件(我假设“字节可用”),但 NSURLConnection 尚未打开输入流。这会导致打印错误消息并且不会发送数据。
我试图在我的 -stream:handleEvent:
方法中捕获这个问题,方法是简单地返回输入流尚未打开的情况,但随后我的输出流获得流关闭事件(可能是因为我从未当我可以的时候发送数据)。
所以我的问题是:如何正确使用 NSURLConnection 的绑定(bind)流对?
(如果这很重要:我正在 iOS 平台上开发)
感谢任何帮助!
干杯,马库斯
最佳答案
好吧,我通过延迟启动上传来解决这个问题,以便在 NSURLConnection
有时间设置其输入流之后启动。
但这并不是我所说的干净的解决方案,因为依赖 -performSelector:withObject:afterDelay:
似乎有点 hacky。
因此,如果其他人有解决方案,我仍然愿意接受任何建议。
关于iphone - 带有 HTTPBody 输入流的 NSURLRequest : Stream sends event before being opened,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3414484/