NSKeyedArchiver mit Arrays verwenden

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

  • NSKeyedArchiver mit Arrays verwenden

    Hallo,
    ich versuche ein Array, welches Tabellencontent enthält zu speichern um beim Programmneustart jene Tabelle wieder zu befühlen. Bisher habe ich Daten so gespeichert:

    Quellcode

    1. NSData *data = [NSKeyedArchiver archivedDataWithRootObject:meinNSString];
    2. [data writeToFile:systempfad atomically:YES];

    Bei den Strings hat das auch gut funktioniert, aber sobald ich ein Array nehme funktioniert es nicht mehr.
    Woran liegt das? Wie kann ich mein Array sonst speichern?
    Vielen Dank schonmal
    LG Viper OS X
  • Das ist die Fehlermeldung:

    Quellcode

    1. -[Vokabeln encodeWithCoder:]: unrecognized selector sent to instance 0x1016427b0
    2. 2013-08-14 17:14:18.795 Ayudo 2.0[3131:303] -[Vokabeln encodeWithCoder:]: unrecognized selector sent to instance 0x1016427b0
    3. 2013-08-14 17:14:18.798 Ayudo 2.0[3131:303] (
    4. 0 CoreFoundation 0x00007fff8e6e2b06 __exceptionPreprocess + 198
    5. 1 libobjc.A.dylib 0x00007fff92ba83f0 objc_exception_throw + 43
    6. 2 CoreFoundation 0x00007fff8e77940a -[NSObject(NSObject) doesNotRecognizeSelector:] + 186
    7. 3 CoreFoundation 0x00007fff8e6d102e ___forwarding___ + 414
    8. 4 CoreFoundation 0x00007fff8e6d0e18 _CF_forwarding_prep_0 + 232
    9. 5 Foundation 0x00007fff8c415121 _encodeObject + 1163
    10. 6 Foundation 0x00007fff8c4160ec -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 410
    11. 7 Foundation 0x00007fff8c415de9 -[NSArray(NSArray) encodeWithCoder:] + 473
    12. 8 Foundation 0x00007fff8c415121 _encodeObject + 1163
    13. 9 Foundation 0x00007fff8c419619 +[NSKeyedArchiver archivedDataWithRootObject:] + 182
    14. 10 Ayudo 2.0 0x000000010000391a -[AyudoController speichern:] + 410
    15. 11 AppKit 0x00007fff93f1d959 -[NSApplication sendAction:to:from:] + 342
    16. 12 AppKit 0x00007fff93f1d7b7 -[NSControl sendAction:to:] + 85
    17. 13 AppKit 0x00007fff93f1d6eb -[NSCell _sendActionFrom:] + 138
    18. 14 AppKit 0x00007fff93f1bbd3 -[NSCell trackMouse:inRect:ofView:untilMouseUp:] + 1855
    19. 15 AppKit 0x00007fff93f1b421 -[NSButtonCell trackMouse:inRect:ofView:untilMouseUp:] + 504
    20. 16 AppKit 0x00007fff93f1ab9c -[NSControl mouseDown:] + 820
    21. 17 AppKit 0x00007fff93f1250e -[NSWindow sendEvent:] + 6853
    22. 18 AppKit 0x00007fff93f0e644 -[NSApplication sendEvent:] + 5761
    23. 19 AppKit 0x00007fff93e2421a -[NSApplication run] + 636
    24. 20 AppKit 0x00007fff93dc8bd6 NSApplicationMain + 869
    25. 21 Ayudo 2.0 0x0000000100001332 main + 34
    26. 22 libdyld.dylib 0x00007fff9260d7e1 start + 0
    27. 23 ??? 0x0000000000000003 0x0 + 3
    28. )
    29. 2013-08-14 17:14:18.798 Ayudo 2.0[3131:303] *** -[NSKeyedArchiver dealloc]: warning: NSKeyedArchiver deallocated without having had -finishEncoding called on it.
    Alles anzeigen

    In dem Array sind int und Strings
  • Kleiner Tipp, bevor du allzu sehr gefrustet wirst:
    JEDES der Objekte in deinem Array muss NSCoding unterstützen.

    Also auch dein Objekt 'Sprache', welches jedem Objekt 'Vokabel' innewohnt, jedes Objekt 'Fehlerrate', welches jedem Objekt innewohnt, jedes Objekt 'Referenz', welches jedem Objekt 'Vokabel' innewohnt und auch jedes Objekt 'Verlag' und 'Autor', welche dem Objekt 'Referenz' inne wohnen.
    (Viele Standardtypen wie NSArray, NSDictionary, NSString oder NSNumber implementieren das Ganze von Haus aus, NSObject aber nicht. Deshalb musst du all deine Subklassen von NSObject um das Protokoll erweitern.)

    Schön brav alles durchimplementieren. :)
    (Oder statt dessen Core Data nutzen +scnr+)
    «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