NSKeyedArchiver und eigenes Objekt.

  • NSKeyedArchiver und eigenes Objekt.

    Hallo,

    ich möchte in den UserDefaults ein schnödes CGRect abspeichern. Dazu habe ich mir eine Klasse von NSObject abgeleitet, dass als einzige Property ein CGRect enthält. Es gibt eine Klassenmethode, die eine Instanz mit einem übergebenen frame zurückliefert.

    Dieses Objekt instanziiere ich und befülle die Property. Danach weise ich das Objekt als einziges Objekt einem NSMutableArray zu. Wenn ich mit diesem Array als Root-Objekt folgendes aufrufe:

    Quellcode

    1. NSMutableArray *array = [NSMutableArray arrayWithObject:[ListEntry entryWithFrame:CGRectMake(50.0f, 50.0f, 170.0f, 150.0f)]];
    2. NSData *data = [NSKeyedArchiver archivedDataWithRootObject:array];

    bekomme ich eine Exception. Wenn ich hingegen ein leeres Array archiviere, geht es. Wenn ich im Debugger bei der *data-Erzeugung einen Breakpoint setze und "po array" eingebe, sehe ich ein korrekt aussehendes Dump.

    Was mache ich falsch? Muss ich für die Unterstützung des KeyedArchiver noch etwas anderes implementieren? Ich habe wirklich nur die eine Property und die Klassenmethode drin ...

    Danke!
  • Es wir an jedes Objekt im Array ein encode.... verschickt, da wahrscheinlich das Object im Array diese Methode nicht implementiert erscheint ein Fehler.
    Könntest du die Fehlerbeschreibung des Exceptoins posten?
    Inos ist ein Gott aus Gothic, dem Spiel.
  • Eigene Objekte müssen afair zumindest -endcodeWithCoder: und -initWithCoder: implementieren, sonst greift NSKeyedArchiver nicht und der Compiler meckert.

    Frameworkeigene Objekte (NSArray, NSSet...) haben das.

    Such halt mal im Forum nach encodeWithCoder und initWithCoder, ich bin daran auch mal gescheitert und es wurde mir geholfen. :)
    «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