Cocoa: Ausgabeordner für Downloads

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Cocoa: Ausgabeordner für Downloads

    Hallo zusammen,
    Bin ein Einsteiger, also nicht gleich verhauen für die Frage :whistling:
    In meiner App kann man über NSURLDownload Dateien herunterladen. Nun möchte ich den Ausgabeordner für die Downloads festlegen.
    Der Ausgabeordner wird gesetzt (funktioniert):

    Quellcode

    1. -(IBAction)SelectDownloadOutput:(id)sender
    2. {
    3. //Schließe Einstellungen
    4. [self.SettingsSheet orderOut:nil];
    5. [NSApp endSheet:self.SettingsSheet];
    6. // Initialisiere und konfiguriere Open-Panel
    7. NSOpenPanel *downloadFolderSelectOpenPanel = [NSOpenPanel openPanel];
    8. [downloadFolderSelectOpenPanel setCanChooseFiles:NO];
    9. [downloadFolderSelectOpenPanel setCanChooseDirectories:YES];
    10. [downloadFolderSelectOpenPanel setCanCreateDirectories:YES];
    11. [downloadFolderSelectOpenPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) {
    12. if (result == NSFileHandlingPanelOKButton)
    13. {
    14. // OK Button gedrückt
    15. // Speichere Pfad
    16. [[NSUserDefaults standardUserDefaults] setValue:[[[downloadFolderSelectOpenPanel URLs] lastObject] path] forKey:@"downloadFolderPath"];
    17. }
    18. }];
    19. }
    Alles anzeigen

    Aber die App kann die Datei nicht ausgeben an den besonderen Pfad (bisher habe ich die Dateien immer im Downloads-Ordner speichern lassen).


    Quellcode

    1. //Download Delegate
    2. - (void)webView:(WebView *)sender decidePolicyForMIMEType:(NSString *)type request:(NSURLRequest *)request frame:(WebFrame *)frame
    3. decisionListener:(id < WebPolicyDecisionListener >)listener
    4. {
    5. if ([type isNotEqualTo:@"text/html"]) {
    6. [listener use];
    7. NSURL *url = [request URL];
    8. NSArray *parts = [[[url absoluteString] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding] componentsSeparatedByString:@"/"];
    9. NSString *filename = parts[[parts count]-1];
    10. if([filename rangeOfString:@"?"].location != NSNotFound)
    11. {
    12. NSArray *names = [filename componentsSeparatedByString:@"?"];
    13. filename = names[0];
    14. }
    15. NSString *homePath = [self homeDirectory];
    16. //Neu
    17. NSString *filePath = [[NSUserDefaults standardUserDefaults] valueForKey:@"downloadFolderPath", filename];
    18. //Neu ende
    19. // So habe ich früher Dateien gesichert:
    20. //[NSString stringWithFormat:@"%@/Downloads/%@", homePath, filename];
    21. DownloadData *downloadData = [[DownloadData alloc] init];
    22. downloadData.fileName = filename;
    23. downloadData.fileSize = 0;
    24. [listDownloadDatas addObject:downloadData];
    25. upDownCellViewController * cellViewController = [[upDownCellViewController alloc] init];
    26. [cellViewController initWithData:downloadData];
    27. [cellViewControllers addObject:cellViewController];
    28. NSURLDownload *down = [[NSURLDownload alloc] initWithRequest:request delegate:cellViewController];
    29. [down setDestination:filePath allowOverwrite:NO];
    30. [self.downloadTableView reloadData];
    31. [AppDelegate setArrayForKey:listDownloadDatas forKey:@"DownloadData"];
    32. NSLog(@"Download did start");
    33. return;
    34. }
    35. [listener use];
    36. NSLog(@"%@", type);
    37. }
    Alles anzeigen
    Kann mir jemand weiterhelfen?
    Bekomme außerdem bei dem was ich im Quellcode mit neu gekennzeichnet habe die Fehlermeldung von Xcode "Too many arguments to method call, expected 1, have 2"
    Freue mich auf Antworten! :)
  • Zuerst mal, was bedeutet "kann die Datei nicht ausgeben"? Hellsehen kann hier keiner. Gibt's eine Fehlermeldung, stürzt die Anwendung ab?

    Generell gilt: Du solltest Pfade nicht einfach zu Strings manuell zusammensetzen und dabei Annahmen über Pfadtrenner machen sondern die dafür vorgesehenen Methoden von NSString verwenden (z.B. "stringByAddingPathComponent" usw. usf.)

    Läuft das in der Sandbox? Dann kannst Du nicht einfach in irgendwelchen Ordnern Dateien anlegen.

    schönen Gruß

    gandhi