NSOperation,同步NSURLConnection,& iPhone上的UIWebView

时间:2010-03-02 13:36:44

标签: iphone uiwebview nsurlconnection nsoperation

我有一个奇怪的问题。这是设置:

  • 我有一个NSOperationQueue,我将NSOperation子类对象添加到。这些使用NSURLConnection sendSynchronousRequest方法进行联网。据我了解,这些是完全异步的,因为它们是NSOperations,每个都有自己的线程。
  • 如果我在没有任何后台网络操作的情况下启动我的应用程序,将URL加载到UIWebView就可以了。
  • 如果我启动我的应用并运行一些后台网络操作,将URL加载到UIWebView会导致此错误:

    错误Domain = WebKitErrorDomain Code = 102 UserInfo = 0x1996d60“帧加载中断”

并且任何后续加载UIWebView的尝试都会失败并出现相同的错误。

我需要注意UIWebView和NSURLConnection之间是否存在一些奇怪的交互?我的下一步是用完全异步的NSOperation替换同步调用,但这是一个奇怪的错误,我想我会问专家。

我已将错误隔离到NSURLConnection sendSynchronousRequest方法。如果我从NSOperation中调用它,UIWebView会破坏性的。

102错误与WebKit中的某些“Policy Changed”错误有关,这在任何地方都很难/没有记录。

有人有任何想法吗?非常感谢任何帮助!

编辑:看起来这是某种cookie问题。如果Web服务器通过后台HTTP请求设置cookie,UIWebView无法加载的任何原因?

2 个答案:

答案 0 :(得分:5)

好的,我已经弄明白了。

显然UIWebView不喜欢使用全局cookie存储的URLConnection HTTPRequests(甚至是ASIHTTPRequest),直到它发生。所以现在我的应用程序抛出一个简单的HTML页面,允许由UIWebView设置cookie,并且每个“下游”的人都是一个显然很开心的露营者,通过NSOperation的API请求和UIWebViews。

万岁!

答案 1 :(得分:0)

我不清楚你要在这里完成什么,UIWebView将自己异步加载NSRequest。要检查的一件事是通过使用NSOperation中的performSelectorOnMainThread:方法之一确保您在UIWebView代码中进行的任何交互都在主线程上。