2012-01-23 2 views
3

나는 ios 용 페이스 북 API를 사용하고 있으며 Facebook 대화 상자를 사용하여 게시하고 있습니다.Facebook 대화 상자가 오류와 함께 실패했습니다 : 작업을 완료 할 수 없습니다. (NSURLErrorDomain 오류 -999)

기본 아이디어는 메서드를 호출하고 로그인하여 즉시 로그인했는지 또는 로그인 한 다음 게시할지 묻는 버튼이 있다는 것입니다. 두 번째 시나리오가 발생하면 페이스 북에 로그인 한 후 바로 게시 할 수 없으므로 버튼을 누르고 메소드를 다시 호출해야 게시 할 수 있습니다.

페이스 북에서 보내는 오류 : 작업을 완료 할 수 없습니다. (NSURLErrorDomain 오류 -999.)

나는 그것에 대해 스택 여기 읽고 그것을 말한다 :

은 "재단 상수 참조"에 따르면, 오류 코드 -999은 "NSURLErrorCancelled"을 의미한다.

설명 :

비동기로드가 취소되면 반환됩니다. 웹 키트 프레임 워크 대리인은로드하는 리소스에서 취소 작업을 수행 할 때이 오류를 수신합니다. 다운로드가 취소되면 NSURLConnection 또는 NSURLDownload 대리자는이 오류를받지 않습니다. iOS 2.0 이상에서 사용할 수 있습니다. NSURLError.h에서 선언되었습니다.

질문은 왜 페이스 북이 나를 보내고 어떻게 해결할 수 있습니까?

더 많은 코드가 필요하면 넣을 수 있습니다.

미리 감사드립니다.

답변

7

나는 이것이 내가 같은 오류 코드 -999을 무시 FBDialog.m을 변경했다 고정하는 방법이

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 
// 102 == WebKitErrorFrameLoadInterruptedByPolicyChange 
NSLog(@"FBDialog webView didFailLoadWithError:%@ %d",error.domain,error.code); 
if ([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999) 
    return; 

if ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102) 
    return; 

[self dismissWithError:error animated:YES]; 
} 

흥미로운 것은 FBDialog은 무시 된 반면 FBLoginDialog 이미 모두 오류 코드 102, -999을 무시하고 있다는 것입니다

이것이 최선의 해결책인지는 잘 모르겠지만 Facebook의 sdk 코드의 다른 부분은 이미 같은 오류를 무시하고 있기 때문에 조금 더 확신하고 있습니다.

+0

감사합니다. 이것은 정말로 도움이된다, 나는 다소 같은 일을했다. 그러나 그것은 나를 위해 hacky하게 보였다. 당신의 대답과 당신이 다루는 방식이 무의미한 것처럼 보입니다. 고마워. @Brian Rothstein –

+0

확실한 것. 코드에서 솔루션이 너무 미친 것은 아니라는 증거를 보는 것이 좋습니다. –

+0

감사합니다. 우리가 인터넷에 연결되어 있는지 여부를 확인하는 데 도움이되었습니다 ... –

2

음, 좋은 소식은 페이스 북에서 친구들이 수정에 동의한다는 것입니다 :

(FB 버그 # 168127053284477에 응답)


    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 
    // 102 == WebKitErrorFrameLoadInterruptedByPolicyChange 
- 
             
  
    if (!([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102)) { 
   
+// -999 == "Operation could not be completed", note -999 occurs when the user clicks away before 
+// the page has completely loaded, if we find cases where we want this to result in dialog failure 
+// (usually this just means quick-user), then we should add something more robust here to account 
+// for differences in application needs 
+if (!(([error.domain isEqualToString:@"NSURLErrorDomain"] && error.code == -999) || 
+ ([error.domain isEqualToString:@"WebKitErrorDomain"] && error.code == 102))) { 
      [self dismissWithError:error animated:YES]; 
     } 
    } 
 
+1

감사. 우리는 결국 너무 해킹되지 않습니다! –

관련 문제