NSOperation, синхронное NSURLConnection и UIWebView на iPhone - PullRequest
0 голосов
/ 02 марта 2010

У меня странная проблема. Вот настройки:

  • У меня есть NSOperationQueue, к которому я добавляю объекты подкласса NSOperation. Они работают в сети, используя NSURLConnection метод sendSynchronousRequest. Насколько я понимаю, они полностью асинхронные, так как они являются операциями NSO, каждый из которых получает свой собственный поток.
  • Если я запускаю свое приложение БЕЗ каких-либо фоновых сетевых операций, загрузка URL в UIWebView работает просто отлично.
  • Если я запускаю свое приложение и выполняю некоторые фоновые сетевые операции, загрузка URL-адреса в UIWebView приводит к этой ошибке:

    Ошибка домена = код WebKitErrorDomain = 102 UserInfo = 0x1996d60 «Прервана загрузка кадра»

и любые последующие попытки загрузить UIWebView завершаются неудачно с той же ошибкой.

Есть ли какое-то странное взаимодействие между UIWebView и NSURLConnection, о котором мне нужно знать? Мой следующий шаг - заменить синхронные вызовы полностью асинхронной NSOperation, но это такая странная ошибка, что я решил спросить экспертов.

Я изолировал ошибку до метода NSURLConnection sendSynchronousRequest. Если я вызываю это из NSOperation, UIWebView ужасно ломается.

Ошибка 102 связана с некоторой ошибкой «Политика изменена» в WebKit, которая плохо / недокументирована где-либо.

У кого-нибудь есть идеи? Любая помощь с благодарностью!

РЕДАКТИРОВАТЬ: Похоже, это какая-то проблема с cookie. Любая причина, почему UIWebView не сможет загрузиться, если веб-сервер устанавливает cookie с помощью фонового HTTP-запроса?

Ответы [ 2 ]

5 голосов
/ 03 марта 2010

ОК, я понял это.

По-видимому, UIWebView не нравится HTTPRequests URLConnection (или даже ASIHTTPRequest), использующие глобальное хранилище cookie, пока не произойдет. Так что теперь мое приложение выдает простую HTML-страницу, позволяющую UIWebView устанавливать cookie-файлы, и каждый «нижестоящий» из этого является явно счастливым сторонником, как запросов API через NSOperation, так и UIWebViews.

Ура! * * 1005

0 голосов
/ 02 марта 2010

Мне неясно, что вы пытаетесь сделать здесь: UIWebView будет загружать NSRequest самостоятельно в асинхронном режиме.Одна вещь, которую нужно проверить, - убедиться, что любое взаимодействие, которое вы выполняете в коде с UIWebView, происходит в главном потоке, используя один из performSelectorOnMainThread: методов из вашей NSOperation.

...