#020 Cheddar: NSUserDefaults
(36:37 Minuten)
Wir zeigen, wie Nutzereingaben automatisch beim Programmende gesichert und beim nächsten Programmstart wieder geladen werden. Das funktioniert unter Mac OS X und iPhone OS identisch, denn beide kennen die NSUserDefaults.
Wenn ihr diese Revision zukünftig aus dem SVN-Repository auschecken wollt, dann könnt ihr im Terminal folgenden Befehl eingeben:
svn checkout -r 19 https://cheddar1.svn.sourceforge.net/svnroot/cheddar1/trunk Cheddar_r19Kommentar hinzufügen
6. Andre am 2. Mar 2010, 20:14 Uhr
Beim dekodieren aus NSData kann man sich einen Schritt sparen: Im Podcast wird gesagt, dass unarchiveObjectWithData immer ein NSArray zurückliefert. In der Doku zur Methode steht aber, dass immer ein solches Objekt zurückgeliefert wird, wie auch verpackt wurde, in unserem Fall also ein NSMutableArray. Das habe ich ausprobiert und es klappt :)
NSMutableArray* array =
[NSKeyedUnarchiver unarchiveObjectWithData:archive];
self.syncItems = array;
Schöne Grüße und weiter so,
Andre
Beim dekodieren aus NSData kann man sich einen Schritt sparen: Im Podcast wird gesagt, dass unarchiveObjectWithData immer ein NSArray zurückliefert. In der Doku zur Methode steht aber, dass immer ein solches Objekt zurückgeliefert wird, wie auch verpackt wurde, in unserem Fall also ein NSMutableArray. Das habe ich ausprobiert und es klappt :)
NSMutableArray* array =
[NSKeyedUnarchiver unarchiveObjectWithData:archive];
self.syncItems = array;
Schöne Grüße und weiter so,
Andre
5. Christian am 12. Dec 2009, 15:35 Uhr
@Ingo: dank Dir vielmals. Habs verstanden - You made my day!!!
@Ingo: dank Dir vielmals. Habs verstanden - You made my day!!!
4. ingo am 12. Dec 2009, 13:04 Uhr
@Christian:
NSUserDefaults hätte auch das NSMutableArray gefressen, das bräuchte man gar nicht groß umwandeln. Das Problem sind aber die darin enthaltenen Objekte, nämlich SyncItem-Objekte. Damit kommt NSUserDefaults so nicht zurecht.
Ich importiere die .h-Date immer nur dort, wo ich sie auch benötige, also z.B. die Datei "SyncItem.h" erst dort, wo erste Mal die Klasse SyncItem benötigt wird. Das ist oft erst in der .m-Dstei. Im SyncItemTableController.h wird die Klasse SyncItem in keinster Weise addressiert, nur ein Array definiert. Also benötigre ich SyncItem.h erst in der .m-Datei.
@Christian:
NSUserDefaults hätte auch das NSMutableArray gefressen, das bräuchte man gar nicht groß umwandeln. Das Problem sind aber die darin enthaltenen Objekte, nämlich SyncItem-Objekte. Damit kommt NSUserDefaults so nicht zurecht.
Ich importiere die .h-Date immer nur dort, wo ich sie auch benötige, also z.B. die Datei "SyncItem.h" erst dort, wo erste Mal die Klasse SyncItem benötigt wird. Das ist oft erst in der .m-Dstei. Im SyncItemTableController.h wird die Klasse SyncItem in keinster Weise addressiert, nur ein Array definiert. Also benötigre ich SyncItem.h erst in der .m-Datei.
3. Christian am 12. Dec 2009, 12:26 Uhr
und noch 'ne Frage zum Import von anderen Klassen:
Wenn ich mich nicht täusche, habt Ihr beim AppDelegate die Import-Anweisung für die Controller-Klasse in die .h-Datei geschrieben. Aber beim Controller steht die Import-Anweisung für die Klasse SyncItems in der .m-Datei.
Kann ich mir aussuchen, wo ich die #import-Anweisung reinschreibe?
und noch 'ne Frage zum Import von anderen Klassen:
Wenn ich mich nicht täusche, habt Ihr beim AppDelegate die Import-Anweisung für die Controller-Klasse in die .h-Datei geschrieben. Aber beim Controller steht die Import-Anweisung für die Klasse SyncItems in der .m-Datei.
Kann ich mir aussuchen, wo ich die #import-Anweisung reinschreibe?
2. Christian am 10. Dec 2009, 15:15 Uhr
Hi Ingo und Peter,
Ihr macht einen Super-Job. Ohne Euch würde ich nur die Hälfte kapieren.
Trotzdem eine kurze Nachfrage zum Thema UserDefaults:
Das NSUserDefaults kann doch auch mit Arrays umgehen. Warum habt Ihr Euch für die Umwandlung des Daten-Arrays in ein NSData-Objekt entschieden. Ihr hättet ja auch das NSMutableArray in eine NSArray umwandeln können...
Hi Ingo und Peter,
Ihr macht einen Super-Job. Ohne Euch würde ich nur die Hälfte kapieren.
Trotzdem eine kurze Nachfrage zum Thema UserDefaults:
Das NSUserDefaults kann doch auch mit Arrays umgehen. Warum habt Ihr Euch für die Umwandlung des Daten-Arrays in ein NSData-Objekt entschieden. Ihr hättet ja auch das NSMutableArray in eine NSArray umwandeln können...
1. Todor am 29. Nov 2009, 17:23 Uhr
Hi Jungs, ich finde was ihr macht ist richtig cool! Ein kleiner Tipp von mir, eure Macs können englische Wörter aussprechen :)
Hi Jungs, ich finde was ihr macht ist richtig cool! Ein kleiner Tipp von mir, eure Macs können englische Wörter aussprechen :)
http://www.mac-talk.eu/entwickler/71-videotutorials-zu-objective-c.html