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

  • Mea culpa, ihr habt ja so Recht .
    Die Zeile

    Quellcode

    1. data = [NSMutableData dataWithContentsOfURL:_url];

    gehört da gar nicht hin, jetzt ist Data nicht nil. Der Pfad stimmt immer noch nicht.
    TwoWaves ist der DateiName und der Ordner WaveData ist leer, das ist doch verzwickt.
    Und ich brauche das Abspeichern dringend, die Berechnungen dauern über eine Stunde,
    ich kann doch nicht jedes mal von vorne anfangen. Bitte, habt Nachsicht mit meinen laienhaften Bemühungen und helft mir.
    Es wäre schön, wenn ich mich revanchieren könnte, aber ihr interessiert euch ja nicht für Physik und Mathematik. ;)

    Uwe
    How come I can't see me in my mirror ?
  • hns schrieb:

    Marco Feltmann schrieb:

    Dylans Ghost schrieb:

    Quellcode

    1. -(id)initWithDocument:(Document*)aDocument;

    Erstens kann ich mir nicht vorstellen, dass das Semikolon hinter aDocument wirklich da steht.
    Das ist übrigens erlaubt und ich mache es gerne damit ich die Methode mit Copy&Paste zwischen @interface und @implementation kopieren kann ohne dauernd ; löschen oder ergänzen zu müssen.

    Bei mir wird gemeckert, dass eine Klammer oder ein Identifier vor { erwartet wird.
    «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
  • Dylans Ghost schrieb:

    Es wäre schön, wenn ich mich revanchieren könnte, aber ihr interessiert euch ja nicht für Physik und Mathematik.

    Interessante Annahme…

    Ein paar Pro-Tipps:
    • NSDatas -writeToUrl:atomically: gibt einen Bool-Wert zurück, der angibt, ob das Speichern erfolgreich war oder nicht.
      Daran erkennst Du, ob das Speichern erfolgreich war oder nicht und musst nicht nach irgendwelchen Dateien suchen.
    • Wenn das Speichern nicht erfolgreich war, hilft NSDatas -writeToUrl:options:error: weiter.
      In der übergebenen Referenz auf ein NSError Objekt bekommst Du ziemlich genau beschrieben, was da schief gegangen ist.


    Ein bisschen Code:

    Quellcode

    1. NSError * writingError = nil;
    2. if( ![data writeToURL:_url options:NSDataWritingAtomic error:&writingError] ) {
    3. if( writingError != nil ) {
    4. NSLog( @"Error writing data to url %@. Error description: %@", _url, [writingError localizedDescription] );
    5. }
    6. }


    Wie bereits geschrieben:
    Wenn Du dringend etwas Neues lernen willst, dann lerne doch einmal das Framework kennen und es zu benutzen.
    «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

  • Quellcode
    NSError * writingError = nil;
    if( ![data writeToURL:_url options:NSDataWritingAtomic error:&writingError] ) {

    if( writingError != nil ) {

    NSLog( @"Error writing data to url %@. Error description: %@", _url, [writingError localizedDescription] );
    }
    }


    Ich hab' keindata object, als muss ich schreiben:

    Quellcode

    1. NSData *data = [NSKeyedArchiver archivedDataWithRootObject:rootObject];


    Nee, das kann nicht richtig sein, ich will ja nix abspeichern was schon gespeichert ist.
    Wie konvertiere ich rootObject oder , wie du meinst, wo finde ich die Information ?
    How come I can't see me in my mirror ?

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

  • Dylans Ghost schrieb:

    Ist das o.k. ?

    Ich versteh' Deine Frage nicht, aber dein Code-Fragment erzeugt ein NSData-Objekt. In diesem findest Du den Objekt-Graph, der hinter dem Objekt "rootObject" steckt in serialisierter Form. Dieses NSData-Objekt kannst Du z.B. auf die Platte schreiben, über's Netz versenden oder ausdrucken um später wieder den ursprünglichen Objekt-Graphen(*) zu erzeugen. Wie dieser Objekt-Graph ausgehend vom Root-Objekt genau aussieht bestimmst Du in der Methode "encodeWithCoder", die Teil des NSCoding-Protokolls ist. Jedes zu serialisierende Objekt muss NSCoding implementieren.

    schönen Gruß

    gandhi

    (*) Achtung! Physiker: Ich meine damit nicht Kohlenstoff in Form von Graphen ^^
  • Hallo gandhi,
    nachdem ich lange gegrübelt habe, ist mir das Thema NSCoding nicht mehr suspekt.
    Anfangs dachte ich, man müsste eine Klasse mit initWithCoder:(NSCoder*)coder einrichten,
    das kam mir kryptisch vor, so wie initWithObject:(NSObject*)object.
    Jetzt kapier ich's. Meine Frage ist nun: Die KeyedArchiver-Klassen sind Kinder von NSObject und
    ich muss <NSCoding> nicht implementieren, oder ?
    Es ist mir auch eingefallen, dass ich die Daten nicht auf die Platten bringen muss, sondern sie in meinem Modell speichern kann, das wollte ich sowieso tun, wenn ich, was jetzt der Fall ist, soweit bin.

    Dei Sternd'l hat bei mir eie Assoziation ausgelöst, ein Grund, warum ich aus meinem Berliner Umfeld geflohen bin: "Schönen Gruss an Graf Koks von der Gasanstalt" X(

    Von mir einen lieben Gruss
    Uwe
    How come I can't see me in my mirror ?
  • Dylans Ghost schrieb:

    Meine Frage ist nun: Die KeyedArchiver-Klassen sind Kinder von NSObject und
    ich muss <NSCoding> nicht implementieren, oder ?


    Alle Klassen im Foundation-Framework bzw. in Cocoa sind Subklassen von NSObject. Eine eigene Root-Klasse zu schreiben, wäre eine nette Übungsaufgabe 8)

    Zum Thema NSCoding: Du musst für jede Deiner Klassen, die Du sterilisieren (Man, regt mich das auf, die Rechtschreibkorrektur macht aus "Serialisieren" immer "Sterilisieren", ich schreib' ab sofort "persistieren"!) willst das NSCoding-Protokoll implementieren, dabei gilt:
    • encodeWithCoder wird aufgerufen, wenn ein NSCoder ein Objekt Deiner Klasse gerade persistieren möchte.
    • initWithCoder wird aufgerufen, wenn das Objekt aus einem Archiv wieder "zum Leben" erweckt wird.
    • Du kannst selber entscheiden, welche Instantvariablen Du persistierst und welche nur transienter Art sind. Das hast Du in der Hand, weil Du ja initWithcCoder und encodeWithCoder selber implementierst.
    • Alle Instanzvariablen deiner Objekte, die nicht atomarer Art sind (Also selber Referenzen auf Objekte, z.B. NSString, aber auch eigene Klassen) müssen wiederum das NSCoding-Protokoll implementieren. So hangelt sich der NSCoder durch den Objekt-Graph (Na gena ugenommen, hangeln sich die Objekte selber)
    schönen Gruß

    gandhi