Вопрос по xcode, iphone, objective-c, ios – Как скачать файл CSV с сервера в Objective-C

4

Я разрабатываю новое приложение для iPhone. Здесь я проанализировал "csv". файл из местного, и он работает со мной. Когда я пытаюсь загрузить "CSV" Программный файл с сервера, для меня это не тренировка. Не могли бы вы мне помочь?

Loading data from local file (Работает нормально)

<code>- (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 
}
</code>

Download the file from Server (не удалось)

<code>-(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];
}
</code>
В чем ваша ошибка? Nikolai Ruhe
данные не попадают внутрь: - "соединение didReceiveData" shebi
что это за метод CSVComponents? ganesh manoj

Ваш Ответ

2   ответа
0

Если вы планируете получать больше данных по сети, чем этот единственный CSV, вы можете посмотреть наAFNetworkingэто отличная библиотека для выполнения сетевых операций.

Рабочее решение будет выглядеть примерно так:

- (void)getCSVAsynch {
    NSString *unescaped = @"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:[unescaped stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"CSV: %@", [[NSString alloc] initWithBytes:[responseObject bytes] length:[responseObject length] encoding:NSUTF8StringEncoding]);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Things go boom. %@", [error localizedDescription]);
    }];
    [operation start];
}
Error: User Rate Limit ExceededexactlyError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

Реализуйте этот метод:

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

Вы обнаружите, что получаете ошибку

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

Я уже рассматривал загрузку информации таким образом ранее, и я думаю, что одна из проблем, с которой вы столкнулись, заключается в том, что отдельные символы должны быть разделены знаком "+". Кроме того, когда вы извлекаете индекс, вы не можете пройти через "^" символ как часть URL. Вы должны заменить его на «% 5E».

Итак, добавьте это:

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

И измените свой URL на это:

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]];

Теперь это работает для меня! Я даже проверил выходной файл .csv, и все выглядит хорошо! Одна полная цитата на строку.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded shebi

Похожие вопросы