NSOperation, синхронный NSURLConnection и UIWebView на iPhone

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

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

    Домен ошибки = WebKitErrorDomain Code = 102 UserInfo = 0x1996d60 «Загрузка кадра прервана»

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

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

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

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

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

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


person Genericrich    schedule 02.03.2010    source источник


Ответы (2)


Хорошо, я понял это.

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

Ура!

person Genericrich    schedule 03.03.2010
comment
Это, конечно, не интуитивно, но я соглашусь с поведением. После того, как мое приложение загрузило первое обращение через UIWebView, вещи URLConnection начали вести себя в соответствии с ожиданиями. - person deafgreatdane; 16.03.2012

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

person Greg Martin    schedule 02.03.2010
comment
NSOperations, выполняющие фоновую работу в сети (опрос API для данных), полностью независимы от UIWebViews. Вот в чем проблема. Между ними нет взаимодействия, поэтому ошибка так сводит с ума. - person Genericrich; 02.03.2010