How to download CSV file from server in Objective-C

csv, ios, iphone, objective-c, xcode

Solution

Implement this method:

-(void)connection:(NSURLConnection *)conn didFailWithError:(NSError *)error

You'll find that you're getting an error of

Error Domain=NSURLErrorDomain Code=-1000 "bad URL" UserInfo=0xf663f40 {NSUnderlyingError=0xf663de0 "bad URL", NSLocalizedDescription=bad URL}

I've looked into downloading information this way before, and I think one problem you're having is that separate symbols have to be separated with a "+". Also, when pulling an index, you can't pass the "^" symbol as part of the URL. You have to replace it with "%5E".

So, add this:

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"%@", [error description]);
}

And change your URL to this:

NSString *urlString = @"http://download.finance.yahoo.com/d/quotes.csv?s=^GSPC+^IXIC+^dji+^GSPC+^BVSP+^GSPTSE+^FTSE+^GDAXI+^FCHI+^STOXX50E+^AEX+^IBEX+^SSMI+^N225+^AXJO+^HSI+^NSEI&f=sl1d1t1c1ohgv&e=.csv";
NSURL *url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];

Now it works for me! I even checked the output .csv file, and it looks good to go! One full quote per line.

Problem

I'm developing a new iPhone application, Here i have parsed a 'csv' file from local, and its working with me. When i try to download the 'csv' file from the server programmatically, it didn't workout for me. Could you please help me? Loading data from local file (Working fine) ``` - (void)viewDidLoad { [super viewDidLoad]; NSString * file = [[NSBundle bundleForClass:[self class]] pathForResource:@"sample" ofType:@"csv"]; NSStringEncoding encoding = 0; NSString * csv = [NSString stringWithContentsOfFile:file usedEncoding:&encoding error:nil]; NSArray *fields = [csv CSVComponents]; NSLog(@"fields: %@", fields); //getting the result content } ``` Download the file from Server (failed) ``` -(void) connectionDidFinishLoading:(NSURLConnection *)connection { NSLog(@"connectionDidFinishLoading"); //nothing showing here NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSString *fullName = [NSString stringWithFormat:@"quotes.csv"]; NSString *fullFilePath = [NSString stringWithFormat:@"%@/%@",docDir,fullName]; [receivedData writeToFile:fullFilePath atomically:YES]; } -(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { NSLog(@"data: %@", data); //nothing showing here if (receivedData) [receivedData appendData:data]; else receivedData = [[NSMutableData alloc] initWithData:data]; } - (void)loadDatafromURL { NSURL *url = [NSURL URLWithString:@"http://download.finance.yahoo.com/d/quotes.csv?s=^GSPC,^IXIC,^dji,^GSPC,^BVSP,^GSPTSE,^FTSE,^GDAXI,^FCHI,^STOXX50E,^AEX,^IBEX,^SSMI,^N225,^AXJO,^HSI,^NSEI&f=sl1d1t1c1ohgv&e=.csv"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [NSURLConnection connectionWithRequest:request delegate:self]; } ```

Original source