HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – UIActivityItemProvider的-item方法:等待NSURLConnection?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个UIActivityItemProvider子类,它应该通过执行以下操作为UIActivityViewController提供NSURL:

>将图像上传到我的服务器
>从服务器接收URL
>将该URL提供给共享者.

理论上看起来相当简单:设置placeholderItem方法以返回虚拟NSURL,然后在item方法中设置所有逻辑来处理上传等.

问题是item方法一个单一的同步方法,它在后台线程上调用,应该处理所有处理并返一个项目(在本例中为NSURL)…以及我需要使用的方法处理上传是异步的(即,我创建一个NSURLConnection,其UIActivityItemProvider子类作为其委托,响应其委托方法以使用进度指示器更新我的UI,等等……但我不能在item方法,因为在它有URL之前我不能让item返回.

我尝试解决方案是让item方法触发URL Connection,然后跳转到这个循环:

while ((self.uploadedFileURL == nil) && (self.uploadErrormessage == nil)) {
        [NSThread sleepForTimeInterval:1.0f];
        NSLog(@"WaiTing for upload...");
    }

然后我依靠各种NSURLConnection委托方法来更新进度等.在didFinishLoading和didFailWithError委托方法中,我分别给self.uploadedFileURL和self.uploadErrormessage赋值.

但是:这不起作用. NSURLConnection永远不会触发委托方法,我必须假设它由于某种原因被阻止.我每天都会在日志中得到一个“等待上传…”,但是没有其他事情发生.

在这里错过了什么?

更新:我找到了各种解决方案,但它不太理想:在-item方法中使用同步请求.最大的缺点是我无显示进度指示器,并且没有很好的处理网络错误.所以……还在寻找更好的方法.

解决方法

好的,所以我发现了一个非常好的解决方案.以下要点提供了NSURLConnection方法的伪同步变体:

https://gist.github.com/SQiShER/5009086

“伪同步”,因为它提供的方法同步返回它们的值,但在后端使用异步方法.我敢肯定这不是一个合理的术语,但它是我所有的:)

无论如何,链接上的代码响应了一些但不是所有的nsurlconnection委托方法……但是添加更多内容是微不足道的.如果有人看到这个并想要更多细节,请发表评论,我会花时间充实这个答案.

大佬总结

以上是大佬教程为你收集整理的ios – UIActivityItemProvider的-item方法:等待NSURLConnection?全部内容,希望文章能够帮你解决ios – UIActivityItemProvider的-item方法:等待NSURLConnection?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。