Wann verwenden Sie encodeWithCoder: und initWithCoder: auf dem iPhone?

8

Wie meine Frage im obigen Thema sagt, welche Anforderungen müssen Sie normalerweise erfüllen, um zu sagen: "Ok, ich brauche encodeWithCoder: und initWithCoder: Instantiierung dafür?" Normalerweise können Sie den Objektstatus in NSUserDefaults schreiben, also bin ich neugierig, wann entscheiden sich Experten dafür, einen gegen den anderen zu benutzen?

    
Coocoo4Cocoa 30.04.2009, 23:33
quelle

4 Antworten

10

initWithCoder: wird vom Betriebssystem verwendet, wenn XIB-Dateien nicht archiviert werden; Wenn Sie genau hinsehen, sehen Sie, dass initWithFrame: nicht für Ansichten aufgerufen wird, die Sie in Ihrem XIB erstellen. Sie werden stattdessen initWithCoder: aufrufen.

    
Ben Gottlieb 01.05.2009 00:51
quelle
9

Benutzervorgaben sind im Grunde genommen eine Eigenschaftsliste. Eigenschaftslisten ähneln JSON und können nur bestimmte Datentypen speichern - NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary. Wenn Sie versuchen, etwas anderes in einem Benutzerstandard zu speichern, erhalten Sie eine Ausnahme. Eigenschaftslisten können auch nicht mit beliebigen Objektgraphen, nur Bäumen, umgehen.

Sie können Ihren benutzerdefinierten Status immer verwenden und ihn in eine eigenschaftslistenkompatible Datenstruktur konvertieren und dann in Benutzerstandardeinstellungen speichern. Aber dann implementieren Sie im Grunde einen Objektserialisierungsmechanismus, und Sie können auch den leistungsfähigeren verwenden, der bereits von NSArchiver bereitgestellt wird.

    
Jens Alfke 01.05.2009 00:19
quelle
6

NSCoder ist die Cocoa-Standardmethode zum Implementieren der Serialisierung. Weitere Informationen finden Sie in Apples Archivierungs- und Serialisierungsleitfaden für Cocoa .

    
rpetrich 30.04.2009 23:53
quelle
1

Ich gehe mit NSCoder immer dann, wenn ich irgendwelche komplizierten Daten zum Speichern habe, die ich nie von Hand bearbeiten muss. Zum Beispiel speichert meine App Converter aus dem Internet heruntergeladene Wechselkurse in einem NSCoder-Archiv. Dies ist jedoch das einzige, was es in einem solchen Archiv behält: Einheitsdefinitionen, die nur von Hand verändert werden, werden in einer Reihe von Plist-Dateien im Anwendungspaket gespeichert, und Dinge wie die zuletzt ausgewählten Einheiten und Werte werden beibehalten NSUserDefaults.

    
Brent Royal-Gordon 01.05.2009 00:58
quelle