ios – UIActivityItemProvider的-item方法:等待NSURLConnection?

ios – UIActivityItemProvider的-item方法:等待NSURLConnection?,第1张

概述我有一个UIActivityItemProvider子类,它应该通过执行以下 *** 作为UIActivityViewController提供NSURL: >将图像上传到我的服务器 >从服务器接收URL >将该URL提供给共享者. 理论上看起来相当简单:设置placeholderItem方法以返回虚拟NSURL,然后在item方法中设置所有逻辑来处理上传等. 问题是item方法是一个单一的同步方法,它在后 我有一个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?所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1024640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存