2010-03-02 3 views
0

이상한 문제가 있습니다. 다음은 설정입니다.NSOperation, NSURLConnection 동기, & UIWebView on iPhone

  • NSOperation 하위 클래스 개체를 추가하는 NSOperationQueue가 있습니다. 이들은 NSURLConnection sendSynchronousRequest 메소드를 사용하여 네트워킹을 수행합니다. 내가 이해할 수 있듯이, 이것들은 NSOperations이기 때문에 완전히 비동기식이다.
  • 백그라운드 네트워킹 작업없이 앱을 시작하면 UIWebView에 URL을로드해도 문제가 없습니다.

    오류 도메인 = WebKitErrorDomain 코드 = 102 사용자 정보 = 0x1996d60

    를 "프레임로드 중단"
  • 나는이 오류에있는 UIWebView 결과에 URL을로드, 내 응용 프로그램을 실행 및 운영 네트워킹 몇 가지 배경을 실행하면

과 같은 오류가 발생하여 UIWebView를로드하려고 시도 할 때마다 동일한 오류가 발생하여 실패합니다.

내가 알고 있어야하는 UIWebView와 NSURLConnection 사이에 이상한 상호 작용이 있습니까? 다음 단계는 동기식 호출을 완전히 비동기식 NSOperation으로 바꾸는 것이지만 전문가에게 물어 보는 것은 이상한 버그입니다.

오류를 NSURLConnection sendSynchronousRequest 메서드로 분리했습니다. NSOperation에서 이것을 호출하면 UIWebView가 무섭게 나옵니다.

102 오류는 WebKit의 "Policy Changed (정책 변경됨)"오류와 관련이 있습니다. WebKit은 어느 곳에서도 문서화가 잘 안되거나 문서화되지 않았습니다.

아무도 아이디어가 있습니까? 어떤 도움이라도 대단히 감사합니다!

편집 : 이것은 어떤 종류의 쿠키 문제인 것 같습니다. 웹 서버가 백그라운드 HTTP 요청을 통해 쿠키를 설정하는 경우 UIWebView가로드되지 않는 이유는 무엇입니까?

답변

5

좋습니다. 알아 냈습니다.

분명히 UIWebView는 전역 쿠키 저장소를 사용하여 URLConnection HTTPRequests (또는 심지어 ASIHTTPRequest)를 좋아하지 않습니다. 그래서 지금 내 애플 리케이션은 쿠키가 UIWebView에 의해 설정 될 수 있도록 간단한 HTML 페이지를 던져, 그리고 그 모든 "다운 스트림"은 분명히 행복 캠프, 둘 다 NSOperation 및 UIWebViews를 통해 API 요청입니다.

만세!

+0

확실히 직관적이지는 않지만 행동에 동의 할 것입니다. UIWebView를 통해 첫 번째 조회를로드하도록 앱을 얻은 후 URLConnection은 예상대로 작동하기 시작했습니다. – deafgreatdane

0

여기서 무엇을하려고하는지 명확하지 않지만 UIWebView는 NSRequest를 비동기 적으로로드합니다. 확인해야 할 것은 NSOperation 내에서 performSelectorOnMainThread: 메서드 중 하나를 사용하여 UIWebView 코드에서 수행중인 모든 상호 작용이 주 스레드에 있는지 확인하는 것입니다.

+0

백그라운드 네트워킹 (데이터 용 API 폴링)을 수행하는 NSOperations는 UIWebViews와 완전히 독립적입니다. 이것이 문제입니다. 이 둘 사이의 상호 작용이 없으므로 버그가 왜 그렇게 대단한가. – Genericrich