NSURL URLWithString:_filePath relativeToURL:baseURL

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

  • NSURL URLWithString:_filePath relativeToURL:baseURL

    Hallo,
    was mache ich falsch ?

    Quellcode

    1. -(void)saveDataToDisk
    2. {
    3. NSLog(@"%@ \n",_basePath); // ~/Documents/WaveData/
    4. NSLog(@"%@ \n",_filePath); // TwoWaves.txt
    5. _basePath = [_basePath stringByExpandingTildeInPath];[color=#FF8C00] // /Users/Home/Documents/WaveData Wo ist der Slash geblieben ?[/color]
    6. _basePath = [_basePath stringByAppendingString:@"/"];[color=#FF8C00] // /Users/Home/Documents/WaveData/[/color]
    7. NSURL * baseurl = [NSURL URLWithString:_basePath];[color=#FF8C00] // /Users/Home/Documents/WaveData/[/color]
    8. NSURL * url = [NSURL URLWithString:_filePath relativeToURL:baseurl];[color=#FF8C00] // TwoWaves.txt -- /Users/Home/Documents/WaveData[/color]
    9. NSData * data = [NSData dataWithContentsOfURL:url];
    10. if(data != nil) [color=#FF8C00]// data is nil[/color]
    11. {
    12. ...
    13. }
    Alles anzeigen


    Ich bitte um Auflösung

    Uwe
    How come I can't see me in my mirror ?
  • Na ja, dein String ist halt keine URL sondern ein Pfad. Apropos Pfad: Du solltest Pfade mit den entsprechenden Methoden von NSString zusammenbauen. Also nicht

    Quellcode

    1. ​stringByAppendingString
    sondern

    Quellcode

    1. ​stringByAppendingPathComponent


    Nimm zum Erzeugen der URL die entsprechende Methode von NSURL zum Erzeugen von File-URLs. den genauen Namen weiß ich gerade nicht auswendig. Findest du aber in der Doku

    gandhi

  • Verwende NSArchiver oder NSKeyedArchiver (siehe Doku)

    Schau dir mein file an, ich verwende die besagten Methoden.
    Was soll ich aber mit encodeWithCoder anfangen, ich hab es als abstrakt behandelt, keine Fehlermeldung,aber data ist nil.
    Die URL lautet: "file://localhost/Users/Home/Documents/WaveData/TwoWaves"
    Ist sie richtig und wenn ja, was kann ich noch ändern ?
    Im Anhang die geänderte Version
    Dateien
    • VRSaveAndLoad.zip

      (2,04 kB, 267 mal heruntergeladen, zuletzt: )
    How come I can't see me in my mirror ?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Dylans Ghost ()

  • Ich bekomm es nicht gebacken, hab' mich jetzt an die Dokumentation gehalten :

    Quellcode

    1. -(id)initWithDocument:(Document*)aDocument;
    2. {
    3. self = [super init];
    4. kWaveData = @"waveData";
    5. _document = aDocument;
    6. _scheme = @"file:///Users/Plum/Documents/WaveData/";
    7. _host = @"";
    8. _path = @"TwoWaves";
    9. _url = [_url initWithScheme:_scheme host:_host path:_path]; // nil
    10. return self;
    11. }
    Alles anzeigen
    How come I can't see me in my mirror ?
  • Oh je, les' Dir bitte einfach mal das Kapitel in der Doku zum Thema "Archives and Serializations Programming Guide" durch. Vor allem "NSCoder" sowie das Protocol "NSCoding". Dann wird Dir klar, das Dein Code einfach nicht funktionieren kann.

    Nur ein paar Hinweise:
    • Deine loadDataFromDisk-Methode versucht zu Schreiben, warum? Deine saveToDisk versucht zu lesen. Versuchst Du den Gegner zu verwirren ;)?
    • Du verwendest iniWithCoder und encodeWithCoder komplett falsch
    • Ebenso hast Du die Bedeutung von "classForKeyedUnarchiver"-Methode nicht verstanden. Das dürfte auch der Grund sein, warum Du mit einer NSCoder-Instanz arbeitest, die wiederum ja abstrakt ist

    ciao

    gandhi
  • Dylans Ghost schrieb:

    Quellcode

    1. -(id)initWithDocument:(Document*)aDocument;
    2. {
    3. _url = [_url initWithScheme:_scheme host:_host path:_path]; // nil
    4. }

    Also ernsthaft, wundert Dich das?
    Erstens kann ich mir nicht vorstellen, dass das Semikolon hinter aDocument wirklich da steht.

    Zweitens initialisierst Du Dein _url, indem Du dieser Variable ein -initWithScheme… sendest.

    Lass mich das mal kurz übersetzen:
    _url = [nil initWithScheme:_scheme host:_host path:_path]; // nil
    Folgerichtig endet eine Nachricht an nil mit dem Resultat nil.

    Du suchst eher:
    _url = [[NSURL alloc] initWithScheme:_scheme host:_host path:_path];
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • [stringValue absolutePath].

    Warum baust Du die URL nicht so auf:
    [NSURL URLWithString:@"file:///Users/Home/Documents/WaveData/TwoWaves"];?
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Aha.
    Ein absoluter Pfad beginnt immer mit einem '/'.

    Eventuell musst Du Deinen String auch über die +pathWithComponents: generieren, um ganz sicher zu gehen.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Ich weine gleich, in meinem Alter ist das wieder erlaubt.
    Data ist nil.

    Quellcode

    1. -(void)saveDataToDisk
    2. {
    3. NSMutableData *data = [[NSMutableData alloc] init];
    4. NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    5. [archiver encodeObject:_archivedData forKey:kArchivedData];
    6. [archiver finishEncoding];
    7. data = [NSMutableData dataWithContentsOfURL:_url]; // /Users/Home/Documents/WaveData/TwoWaves
    8. if(data != nil)
    9. {
    10. BOOL result = [data writeToURL:_url atomically:YES];
    11. _result = [NSNumber numberWithBool:result];
    12. }
    13. }
    Alles anzeigen


    Ich hab mir eine kleine Methode gebastelt, um einen sicheren Pfad zu bekommen (s. Anhang)
    Wirf mal einen Blick drauf, Marco, vielleicht hab ich was falsch gemacht, ist aber nicht zu erkennen.
    Dateien
    How come I can't see me in my mirror ?
  • Wie ghandi schon schrieb: versuchst Du den Gegner zu verwirren?

    Du willst die Daten einer URL auslesen.
    Dann willst Du diese Daten unverändert in dieser URL speichern.

    Übersetzt:

    Quellcode

    1. data = [NSMutableData dataWithContentsOfURL:[NSURL URLWithString:@"file:///testdatei"];
    2. [data writeToURL:[NSURL URLWithString:@"file:///testdatei"];


    Warum data == nil greift kann ich nur raten:
    Die Datei /Users/Home/Documents/WaveData/TwoWaves existiert nicht oder die App hat unzureichende Zugriffsrechte.

    Dein Word Dokument in allen Ehren: eventuell lernst Du lieber mal was Neues im Sinne von 'wie nutze ich das Framework richtig'.
    Du machst genau das, was [NSString pathWithComponents:] auch macht. Außer, dass Du dafür eigene Komponenten baust und dann [NSString pathWithComponents:] aufrufst. Auf eine Weise, die unverständlich ist.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Deine Zeilen 4-10 aus dem obigen Code bewirken rein gar nix, da Du in Zeile 12 den Inhalt von data einfach wegschmeißt und durch eine neue NSData-Instanz mit dem Inhalt Deiner URL ersetzt (Sofern diese Datei wirklich existiert und gelesen werden kann).

    Anschließend schreibst Du genau diesen Inhalt wieder an dieselbe URL zurück. Was soll deiner Meinung nach passieren? Es ist so: Wenn die Datei existiert und gelesen werden kann schreibst Du den Inhalt gleich wieder zurück -> es nix passiert. Wenn die URL nicht existiert, dann ist data == Nil und es passiert erst recht nix. Ganz abgesehen von den Zeilen mit dem Archiver, die machen nie was. Sozusagen veredelte "nop"-Befehle 8)

    Nachtrag: Warum weigerst Du dich so hartnäckig die entsprechenden Pfad-Methoden von NSString und NSURL zu verwenden und baust stattdessen eigene?

    ciao

    gandhi