Сбой диалога Facebook с ошибкой: операция не может быть завершена. (NSURLErrorDomain ошибка -999.) - PullRequest
3 голосов
/ 24 января 2012

Я использую API Facebook для IOS и использую диалоги Facebook для публикации.

Основная идея состоит в том, что у меня есть кнопка для публикации, которая вызывает метод и спрашивает, вошли ли вы в систему, чтобы опубликовать сразу или выполнить вход, а затем опубликовать. Когда происходит второй сценарий, я не могу опубликовать сразу после входа в Facebook, поэтому я должен нажать на кнопку и вызвать метод еще раз, чтобы я мог опубликовать.

Ошибка, которую отправляет мне Facebook, говорит: Операция не может быть завершена. (NSURLErrorDomain ошибка -999.)

Я прочитал об этом здесь, в стеке, и там написано:

Согласно «Справочнику по константам основания» код ошибки -999 означает «NSURLErrorCancelled».

Описание:

Возвращается при отмене асинхронной загрузки. Делегат инфраструктуры веб-набора получит эту ошибку, когда выполнит операцию отмены над загрузочным ресурсом. Обратите внимание, что делегат NSURLConnection или NSURLDownload не получит эту ошибку, если загрузка будет отменена. Доступный в iOS 2.0 и позже. Объявлено в NSURLError.h.

Вопрос в том, почему Facebook посылает мне это и как я могу это решить?

Если нужно больше кода, я могу его поставить.

Заранее спасибо.

Ответы [ 2 ]

7 голосов
/ 04 февраля 2012

Как я это исправил, я изменил FBDialog.m, чтобы игнорировать код ошибки -999, как это

- (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];
}

Интересно то, что FBLoginDialog уже игнорировал оба кода ошибки 102 и -999, тогда как FBDialog игнорировал только 102. Убедитесь сами: https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBLoginDialog.m#L85

Я не знаю, является ли это лучшим решением, но я чувствую себя немного более уверенно в этом, поскольку другой фрагмент кода Facebook SDK уже игнорирует ту же ошибку.

2 голосов
/ 04 мая 2012

Что ж, хорошая новость в том, что взгляды на Facebook согласны с вашим исправлением:

(в ответ на ошибку FB # 168127053284477)


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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...