1

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



}

ありがとう

4

1 に答える 1

3

これを行うために実際に使用する必要はありませんcurlNSDataタスクをはるかに簡単に達成するために使用するだけです:

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];
于 2011-02-06T06:08:06.353 に答える