exc_bad_access из ASIHTTPRequest при отображении контроллера представления во время загрузки для iphone - PullRequest
4 голосов
/ 21 августа 2011

У меня есть пользовательский навигационный контроллер, поэтому я сделал свою собственную кнопку возврата, которая выполняет

-(void)navigateBack{
    [self.navigationController popViewControllerAnimated:YES];
}

, и при просмотре загрузился, я запрашиваю много изображений, используя ASINetworkQueue

-(void)sendRequest:(NSURL *)url withParams:(NSDictionary *)params andSelector:(NSString *)selector{
NSString *jsonString = [params yajl_JSONString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:jsonString forKey:@"json"];
[request setTimeOutSeconds:15];
[[self networkQueue] setDelegate:self];
[[self networkQueue] setRequestDidFinishSelector:NSSelectorFromString(selector)];
[[self networkQueue] setRequestDidFailSelector:@selector(asiRequestFailed:)];
[[self networkQueue] addOperation:request];
[[self networkQueue] go];
}

По сути, каждый раз, когда я отправляю HTTP-запрос, я просто делаю [self sendRequest:].Когда я перехожу к этому viewcontroller, а затем нажимаю назад до загрузки всех изображений, я получаю EXC_BAD_ACCESS, который указывает на строку, где ASIHTTPFormRequest пытается выполнить селектор.Я попытался поместить

[networkQueue cancelAllOperations];[self setNetworkQueue:nil];

в свой метод dealloc, и я установил точки останова до и после этого, и я могу видеть из GDB, что в очереди больше нет запросов, но ошибка продолжает появляться.Я что-то упустил?

спасибо

1 Ответ

4 голосов
/ 21 августа 2011

Вероятно, вам позвонят ваши делегаты, чтобы уведомить вас об отмене. Вам необходимо удалить все делегаты в вашем методе dealloc, например:

for (ASIHTTPRequest *req in [queue operations])
{
    [req setDelegate:nil];
    [req cancel];
}
[queue setDelegate:nil];

(а также делегаты прогресса и т. Д., Если вы их используете)

...