Вопрос какао - NSTask не работает - PullRequest
1 голос
/ 06 февраля 2011

NSTask не работает; Я думаю, что это связано с аргументами. Вот мой код:

 - (IBAction)downloadFile:(id)sender {

    // allocate our stuff :D
    progressIndication = [[NSProgressIndicator alloc] init];
    NSTask *downloader = [[NSTask alloc] init];

    // set up the downloader task
    [downloader setLaunchPath:@"/usr/bin/curl"];
    [downloader setArguments:[NSArray arrayWithObject:[NSString stringWithFormat:@"-LO %@", downloadURL]]];

    // go to the Desktop!
    system("cd ~/Desktop");

    // start progress indicator
    [progressIndication startAnimation:self];

    // download!
    [downloader launch];

    // stop the progress indicator, everything is done! :D
    [progressIndication stopAnimation:self];



}

Спасибо

1 Ответ

3 голосов
/ 06 февраля 2011

Вам действительно не нужно использовать curl для этого;просто используйте NSData, чтобы выполнить задачу гораздо проще:

NSData *data = [NSData dataWithContentsOfURL:downloadURL];
[data writeToFile:[[NSString stringWithFormat:@"~/Desktop/%@", [downloadURL lastPathComponent]] stringByExpandingTildeInPath] atomically:YES];

Если вы настаиваете, что для этого вам нужно использовать curl, вам придется исправить свой код,не работает по нескольким причинам.Прежде всего, ваши аргументы неверны.У вас должен быть следующий код:

[downloader setArguments:[NSArray arrayWithObjects:@"-L", @"-O", [downloadURL absoluteString], @"-o", [NSString stringWithFormat:@"~/Desktop/%@", [downloadURL lastPathComponent]], nil];

Во-вторых, system("cd ~/Desktop") не имеет смысла;избавиться от него.
Наконец, NSTask работает одновременно.[downloader launch] начинает операцию, и ваш код продолжается.Должно быть:

[downloader launch];
[downloader waitUntilExit]; // block until download completes
[progressIndication stopAnimation:self];
...