Różnica polega na tym, że pierwszy kod-snippet zarejestrować domyślne, które będą stosowane, gdy użytkownik nie ma żadnych zmian własność".
Jeśli więc chcesz podać "właściwość" z nazwą klucza "Wiadomość powitalna", możesz zamiast zwracać właściwość o wartości zero wstawić domyślną wiadomość "Witamy pierwszego użytkownika", która zostanie wyświetlona, gdy nie wprowadzono żadnych zmian w nieruchomości.
Spowoduje to uproszczenie logiki, ponieważ nie trzeba pisać testu if
, aby sprawdzić, czy "właściwość" zwraca zero, a następnie w razie potrzeby utworzyć kolejną wiadomość.
NSString *greeting = [[NSUserDefaults standardUserDefaults] stringForKey:@"Greeting"];
if(greeting == nil) {
NSLog(@"Welcome first-time user!");
}
Drugi zaksięgowany fragment kodu służy do ustawiania właściwości na inną wartość. Będziesz miał różne metody ustawiania (setString, setObject, setBoolean) do ustawiania wartości w zależności od stanu twojego programu w Userdefaults.
EDYCJA ----- Aktualizuje zgodnie z życzeniem w komentarzu.
Pierwsza metoda służy do rejestrowania wartości domyślnych, jak sama nazwa wskazuje. Przy pierwszym dostępie do właściwości o pewnej nazwie kluczowej wartość będzie zerowa dla obiektów, fałsz dla wartości logicznych lub 0 dla liczb. Zamiast wykonywać wiele testów i tak dalej, jeśli wartości nie są ustawione w programie, a następnie wykonać coś "domyślnego", takiego jak powyższy przykład, można wysłać aplikację z pewnymi wcześniej zdefiniowanymi wartościami dla tych kluczy.
Typowym miejscem do umieszczenia registerDefaults jest metoda initializer w appDelegate.
Potem gdzieś w programie możesz ustawić wartości tych pól, a następnie użyć setObject, setString, setBoolean ... i za zdobycie użyć stringForKey, objectForKey ...
myśleć o tym jako że ten RegisterDefaults jest konstruktorem, w którym możesz dostarczyć wartości sensowne dla obiektu, w przeciwnym razie otrzymasz pewne wartości domyślne, które już napisałem. Później, jeśli chcesz zmienić atrybuty obiektu, NIE używaj "konstruktora", ale metody set/get.
Hmmm Wciąż nie bardzo rozumiem.Masz na myśli, że mogę ustawić właściwość @ "something" na anObject za pomocą jednego z fragmentów kodu, ale tylko ten pierwszy sprawdzi, czy już mam zapisaną wcześniej wartość, czy to prawda? Jeśli mam coś napisanego wcześniej, to nie przepisuję wartości, czy to prawda? –
Zaktualizowana odpowiedź. – LuckyLuke
Dzięki za zaktualizowaną odpowiedź! Tylko jedna mała rzecz ... Jeśli wstawię registerDefault do AppDelegate, czy to oznacza, że nie będzie on wywoływany więcej niż raz? Na przykład mój fragment kodu, to ustawi @ tylko raz "coś" dla anObject, prawda? Mimo że kod jest uruchamiany w AppDelegate za każdym razem, gdy uruchamiam aplikację? –