Я использую NSURLConnection для извлечения данных из RSS-канала. Я установил значение тайм-аута по умолчанию на 30 секунд. В ситуациях с низким Wi-Fi-соединением я получаю ответ на тайм-аут (От не удалось с ошибкой) как обычно через 30 секунд. IУдостоверьтесь, что соединение сбрасывается при поступлении обратного вызова. Но еще через 30 секунд (в общей сложности 60 секунд после отправки запроса) я получаю еще один обратный вызов. Я пытался отладить, но второй обратный вызов не отслеживается нигде.
Также это появляется в самый первый раз, когда я отправляю запрос. В следующий раз, когда я отправляю запрос, появляется только один обратный вызов.Есть еще одна тема с той же проблемой, но я не нашел там конкретного ответа. Буду очень признателен, если кто-нибудь сможет мне помочь.
Вот мое создание соединения, делегат, FailwithError и Callback Function
//MainClass.m
- (void)LoadRSSFeed {
if (Stories == nil) {
[activityIndicator startAnimating];
rssParser = [[Parser alloc] init];
[rssParser parseRssFeed:@"http://twitter.com/statuses/user_timeline/56202272.rss" withDelegate:self];
} else {
[newsTable reloadData];
}
}
//Parser Class where connection is called
- (void)parseRssFeed:(NSString *)url withDelegate:(id)aDelegate {
[self setDelegate:aDelegate];
ERROR = FALSE;
responseData = [[NSMutableData data] retain];
NSURL *baseURL = [[NSURL URLWithString:url] retain];
NSLog(@"Creating Connection");
NSURLRequest *request = [NSURLRequest requestWithURL:baseURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:30.0];
conn = [[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"Error");
ERROR = TRUE;
if (_delegate)
{
[_delegate receivedItems:nil];
}
else
{
}
}
//Delegate Callback Function in MainClass.m
- (void)receivedItems:(NSArray *)theItems {
[rssParser setDelegate:nil];//setting delegates to nil
[rssParser release];
rssParser = nil;
Stories = theItems;
if([activityIndicator isAnimating]){
if(Stories!=nil)
{
if([Stories count])
{
[newsTable reloadData];
}
}else{
NSLog(@"Showing Alert");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Time Out" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil, nil];
[alert show];
[alert release];
}
}
[activityIndicator stopAnimating];
}
Представление оповещения в функции обратного вызова вызывается дважды. После обычного 30-секундного тайм-аута и одного через 60 секунд, которое я не могу отследить. Даже если я добавляю точки останова или NSlogs перед представлением оповещений, они не вызываютсяили захватывает.
Любая помощь здесь будет действительно признательна.
Azeem