2011-07-08 24 views
0

我正在使用ASIHTTPRequest从Internet下载数据。如果我失去了互联网连接,并且我尝试加载应用程序崩溃的数据。ASIHTTPRequest在中断Internet连接后导致崩溃

代码:

- (IBAction)load:(id)sender { 
    if ([act isAnimating]) { 
     NSLog(@"Request already being processed!"); 
    } 
    else { 
    ASINetworkQueue *queue = [ASINetworkQueue queue]; 
    ASIHTTPRequest *usdRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADUSD=X&f=l1"]]; 
    ASIHTTPRequest *eurRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADEUR=X&f=l1"]]; 
    ASIHTTPRequest *dateRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADEUR=X&f=d1"]]; 
    ASIHTTPRequest *timeRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADEUR=X&f=t1"]]; 

    [queue addOperation:usdRequest]; 
    [queue addOperation:eurRequest]; 
    [queue addOperation:dateRequest]; 
    [queue addOperation:timeRequest]; 

    [queue setQueueDidFinishSelector:@selector(parseLoadedData:)]; 
    [queue setRequestDidFinishSelector:@selector(requestLoaded:)]; 
    [queue setDelegate:self]; 
    [queue go]; 
    [act startAnimating]; 
    } 
} 

- (void)requestLoaded:(ASIHTTPRequest *)request { 
    if([[request url] isEqual:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADUSD=X&f=l1"]]) { 
     usdString = [[request responseString] retain]; 
    } else if([[request url] isEqual:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADEUR=X&f=l1"]]) { 
     eurString = [[request responseString] retain]; 
    } else if([[request url] isEqual:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADEUR=X&f=d1"]]) { 
     dateString = [[request responseString] retain]; 
    } else if([[request url] isEqual:[NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=CADEUR=X&f=t1"]]) { 
     timeString = [[request responseString] retain]; 

} 
} 

- (void)parseLoadedData:(ASIHTTPRequest *)request { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *Date = [dateString stringByReplacingOccurrencesOfString:@"\"" withString:@""]; 
    NSString *Time = [timeString stringByReplacingOccurrencesOfString:@"\"" withString:@""]; 
    NSString *total = [NSString stringWithFormat:@"%@ %@",Date,Time]; 

    if ([eurString length] == 0) { 
     test.text = [defaults objectForKey:@"date"]; 
     eur.text = [defaults objectForKey:@"eur"]; 
     usd.text = [defaults objectForKey:@"usd"]; 

    } else { 
     test.text = total; 
     eur.text = eurString; 
     usd.text = usdString; 
     [defaults setObject:test.text forKey:@"date"]; 
     [defaults setObject:usd.text forKey:@"usd"]; 
     [defaults setObject:eur.text forKey:@"eur"]; 
    } 

    [defaults synchronize]; 
    [eurString release]; 
    [usdString release]; 
    [dateString release]; 
    [timeString release]; 
    [act stopAnimating]; 

} 

回答

1

好了,因为没有人回答,我看了更多的它,我发现,该请求完成时,我不得不为每个下载的字符串文本设置为@” “,这样当下一个请求完成,并且没有互联网连接时,字符串保持@”“,以便在pareLoadData该应用识别[eurString length] == 0。所以基本上我只需要后

[eurString release]; 
    [usdString release]; 
    [dateString release]; 
    [timeString release]; 

我希望这会帮助,如果任何人有类似的问题,以增加

eurString = nil; 
    usdString = nil; 
    gbpString = nil; 
    jpyString = nil; 
    audString = nil; 

。我现在非常高兴,现在我的应用程序超级稳定,不能崩溃! :)