Создание и отмена NSURLConnection - PullRequest
4 голосов
/ 24 января 2010

У меня есть NSURLConnection, который работает нормально, когда я позволяю завершить загрузку. Но если пользователь нажмет кнопку «назад», что означает, что веб-просмотр исчезнет, ​​я хочу отменить незавершенное соединение NSURLC. Но если при вызове viewWillDissapear вызывается вызов webview в этот класс, я делаю:

[conn cancel]

Я получаю исключение NSINValidArgument.

Соединение определяется как данные экземпляра в файле .h как:

NSURLConnection *conn;

Асинхронизация начинается здесь:

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:articleURL]];

    if ([NSURLConnection canHandleRequest:request] && reachable) {
        // Set up an asynchronous load request
        conn = [NSURLConnection connectionWithRequest:request delegate:self];
        loadCancelled = NO;
        if (conn) {
            NSLog(@" ARTICLE is REACHABLE!!!!");
            self.articleData = [NSMutableData data];
        }
    }

1 Ответ

11 голосов
/ 24 января 2010

Причина, по которой вы получили исключение, заключается в том, что вы сохраняете объект автоматического выпуска в переменной экземпляра. «conn» будет автоматически выпущен сразу, когда пользователь нажмет кнопку «назад». После этого вы звоните отменить. Поэтому у вас было исключение.
Чтобы предотвратить это, вы должны сохранить объект NSURLConnection, когда храните его в переменной экземпляра.

conn = [[NSURLConnection connectionWithRequest:request delegate:self] retain];

или

conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];

Не забудьте опубликовать это в методе dealloc.

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