NSUserDefaults

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

  • NSUserDefaults

    Hallo Community, ich habe mithilfe eines Buches die NSUserDefaults Klasse kennen gelernt. Ich weiß, wie ich daten abrufen und einzeln wieder speichern kann, mir ist jedoch nicht ganz klar, wie die Methode

    Quellcode

    1. registerDefaults
    funktioniert und was sie macht. Ich bin momentan einwenig durcheinander, könntet ihr mir vielleicht dabei helfen?


    Gruß, Sam99
  • In den NSUserDefaults werden Werte als Schlüssel-Wert-Paar gespeichert. Mit regsiterDefaults: kannst du Standard-Schlüssel-Wert-Paare angeben.

    Du möchtest zum Beispiel unter dem key @"name" einen bestimmten Namen als Voreinstellung speichern:

    PHP-Quellcode

    1. [[NSUserDefaults standUserDefaults] registerDefaults:[NSDictionary dictionaryWithObject:@"Peter Müller" forKey:@"name"]];


    Dieser Wert ist der Standardwert, d.h. wenn du den Namen nicht änderst, erhälst du immer diesen Wert.

    PHP-Quellcode

    1. [[NSUserDefaults standUserDefaults] setObject:@"Hans Peter" forKey:@"name"];


    Wenn du diesen Code ausführst wirst du fortan immer @"Hans Peter" als Wert für @"name" erhalten, bis du den Wert wieder änderst oder NSUserDefaults zurücksetzst. Nach dem Zurücksetzen würde wieder @"Petter Müller" unter dem key @"name" liegen, bis du das änderst.

    registerDefaults solltest du so früh wie möglich beim Programmstart ausführen. Ich mache das immer in +(void)initalize des AppDelegates.
  • und wo ist jetzt der Unterschied wenn ich statt des register einfach einen set nehmen würde ?

    Ich denke register isst eher dazu da um eben mehrere Defaults auf einmal setzen zu können. Einen anderen Vorteil sehe ich nicht.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • gritsch schrieb:

    Thallius schrieb:

    und wo ist jetzt der Unterschied wenn ich statt des register einfach einen set nehmen würde ?

    Ich denke register isst eher dazu da um eben mehrere Defaults auf einmal setzen zu können. Einen anderen Vorteil sehe ich nicht.

    Gruß

    Claus


    du sparst dir die abfrage ob schon ein wert vorhanden ist


    Ähm wenn ich statt register einfach set nehme, dann brauche ich keine abfrage. Ich kann die ja auch mit set vorinitialisieren.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    und wo ist jetzt der Unterschied wenn ich statt des register einfach einen set nehmen würde ?

    Ich denke register isst eher dazu da um eben mehrere Defaults auf einmal setzen zu können. Einen anderen Vorteil sehe ich nicht.

    Gruß

    Claus


    du sparst dir die abfrage ob schon ein wert vorhanden ist


    Ähm wenn ich statt register einfach set nehme, dann brauche ich keine abfrage. Ich kann die ja auch mit set vorinitialisieren.

    Gruß

    Claus


    dann überschreibst du sie ja jedesmal!
  • gritsch schrieb:

    Thallius schrieb:

    gritsch schrieb:

    Thallius schrieb:

    und wo ist jetzt der Unterschied wenn ich statt des register einfach einen set nehmen würde ?

    Ich denke register isst eher dazu da um eben mehrere Defaults auf einmal setzen zu können. Einen anderen Vorteil sehe ich nicht.

    Gruß

    Claus


    du sparst dir die abfrage ob schon ein wert vorhanden ist


    Ähm wenn ich statt register einfach set nehme, dann brauche ich keine abfrage. Ich kann die ja auch mit set vorinitialisieren.

    Gruß

    Claus


    dann überschreibst du sie ja jedesmal!


    Ah ok, stimmt. Zeit für Kaffee

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • MyMattes schrieb:

    Thallius schrieb:

    und wo ist jetzt der Unterschied wenn ich statt des register einfach einen set nehmen würde ?

    Eine Sache noch (auch wenn diese eher kosmetischer Natur ist): Falls eine Variable dem Wert des registrierten Defaults entspricht, erfolgt keine Speicherung in der Plist ... das hält diese schön übersichtlich :)

    Mattes


    Wiie oft siehst du Dir denn die plist an ? Ist mir eigentlich ziemlich egal wie übersichtlich die ist :D

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Thallius schrieb:

    Wiie oft siehst du Dir denn die plist an ? Ist mir eigentlich ziemlich egal wie übersichtlich die ist :D

    Stimmt, ist mir auch ziemlich latte ... ausser wenn Du vielleicht ein "hidden feature" per Defaults-Variable de- / aktivierbar haben möchtest, aber neugierige User diese nicht in der Plist finden sollen ... okay, das war jetzt etwas konstruiert. 8)

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Thallius schrieb:

    Wiie oft siehst du Dir denn die plist an ? Ist mir eigentlich ziemlich egal wie übersichtlich die ist :D

    Stimmt, ist mir auch ziemlich latte ... ausser wenn Du vielleicht ein "hidden feature" per Defaults-Variable de- / aktivierbar haben möchtest, aber neugierige User diese nicht in der Plist finden sollen ... okay, das war jetzt etwas konstruiert. 8)

    Mattes


    Dann ist ja gut. Ich hatte schon befürchtet Du bist so einer, der stundenlang vor seiner im Textedit geöffneten plist sitzt und vor Begeisterung in die Hände klatscht. Das hätte mir zu denken gegeben :D

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Dann könnte man auch gleich hergehen und sagen "Es ist unschöner Programmierstil Speicher den man nicht mehr braucht nicht sofort wieder freizugeben" und damit wären komplett alle objektorientierten Sprachen unschön ;)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Speicher nicht frei zu geben, den man nicht mehr braucht, ist ja auch unschöner Programmierstil...oder hälst du alle Objekte, die du zur Laufzeit erzeugst, im Speicher fest? Also ich geb die idR frei (wenn ichs nicht vergesse :D). OK, meine Programme müssen idR auch noch auf 10.5 (teilweise 10.4) laufen, da kann ich mir den Luxus von ARC nicht leisten ;)
    [self setSignature:null];
    [[self postCount] increment];
  • Mike schrieb:

    Speicher nicht frei zu geben, den man nicht mehr braucht, ist ja auch unschöner Programmierstil...oder hälst du alle Objekte, die du zur Laufzeit erzeugst, im Speicher fest? Also ich geb die idR frei (wenn ichs nicht vergesse :D). OK, meine Programme müssen idR auch noch auf 10.5 (teilweise 10.4) laufen, da kann ich mir den Luxus von ARC nicht leisten ;)


    Naja Du machst vlt ein Release, aber das bedeutet ja noch lange nicht das der Speicher auch wieder freigegeben wird. Das macht ja das System irgendwann wenn es meint das es das machen möchte. Das meinte ich mit OOC ist dann komplett schlechter Stil. Ist was anderes als das gute ale alloc und free in ANSI damals. Da wußte man tatsächlich noch wieviel Speicher man gerade verbraucht.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • A pros pros schlechter Stil: Ist es schlechter Stil, wenn ich in den Ressources meiner App eine plist-Datei speicher, diese als NDictionary lade und für registerDefaults: verwende? Ist es nämlich wesentlich einfacher in dem plist-Editor von Xcode defaults hinzuzufügen und zu löschen als das Immer im Code zu machen. Allerdings hat man dann in den Ressources eine Datei mehr. Mit Dateigröße braucht mir aber keiner kommen, die brauchen nur ein paar kB ;)
  • DroneDeveloper schrieb:

    PLISTs sind sowieso schlechter Stil weil sie immer komplett in den Speicher geladen werden müssen.

    Fasse zusammen: NSUserDefaults sind schlechter Stil. :rolleyes:
    «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