Gdy patrzę na dokumentację, nie widzę dużej różnicy. Zarówno "wartość" jak i "obiekt" są typu id, więc może to być dowolny obiekt. Klucz jest raz łańcuchem, w drugim przypadku identyfikatorem. Jeden wydaje się zachować obiekt, a drugi nie. Co jeszcze? W którym przypadku?Gdzie jest różnica między setObject: forKey: a setValue: forKey: in NSMutableDictionary?
Odpowiedz
setValue:forKey:
jest częścią protokołu NSKeyValueCoding, który umożliwia między innymi uzyskiwanie dostępu do właściwości obiektu z poziomu takiego jak Interface Builder. setValue:forKey:
jest zaimplementowany w klasach innych niż NSDictionary
.
setObject:forKey:
jest powodem, by istnieć. Jego podpis jest dość podobny do setValue: forKey :, ale jest bardziej ogólny (np. Dowolny typ klucza). To trochę zbieg okoliczności, że podpisy są tak podobne.
Co wprowadza zamieszanie w to, że implementacja NSMutableDictionary z setValue:forKey:
jest w większości przypadków odpowiednikiem setObject:forKey:
. W innych klasach setValue:forKey:
zmienia zmienne składowe. W NSMutableDictionary
zmienia wpisy słownikowe, chyba że przedrostkujesz klawisz znakiem "@" - w takim przypadku modyfikuje zmienne składowe.
Więc w pigułce, użyj setObject:forKey:
gdy trzeba pracować z kluczami słownika i wartości i setValue:forKey:
w rzadszych przypadkach, gdy potrzebne do rozwiązania KVP.
EDIT: och, to wygląda to zostało zadane i odpowiedzi przed: Difference between objectForKey and valueForKey?
to pytanie nie jest dokładnie takie samo.chodzi o metody getter, podczas gdy pytanie to dotyczy metod ustawiających. – user102008
Co masz na myśli przez "W NSMutableDictionary, zmienia on wpisy w słowniku, chyba że przedrostkujesz klucz znakiem" @ "- w takim przypadku modyfikuje zmienne składowe . " Jakie zmienne członkowskie? Być może możesz wypowiedzieć się na http://stackoverflow.com/questions/5755917/? Dzięki. –
tylko dla kompletności, setObject: forKey podniesie (wyjątek), jeśli obiekt jest zerowy. Czy setValue: forKey będzie zachowywał się tak samo, czy usunie istniejący obiekt ze słownika przy ustawieniu zero dla klucza? –
Inną różnicą jest to, że jeśli dać zerowa wartość do setValue:forKey:
, usuwa klucz ze słownika, jeśli istnieje, w przeciwnym razie nic nie robi. Ale jeśli dasz zerową wartość do setObject:forKey:
, to podnosi wyjątek.
Jest to bardzo przydatne, aby wiedzieć. W przeciwnym razie napisałem własną kategorię na NSMutableDictionary, aby osiągnąć dokładnie to !. Dzięki – Arman
Kolejna różnica polega na subskrybowaniu celu c, możesz napisać 'dic [key] = value;' aby wesprzeć usunięcie klucza, jeśli wartość wynosi 'nil'. Zasubskrybowanie jest na ogół lepszym rozwiązaniem niż "setValue: forKey:", aby to osiągnąć. –
anObject — Wartość klucza. Obiekt otrzymuje komunikat zatrzymujący przed dodaniem go do NSDictionary
. Ta wartość nie może być zerowa.
aKey — Klucz wartości. Klucz jest kopiowany (przy użyciu copyWithZone:
, klucze muszą być zgodne z protokołem NSCopying
). Klucz nie może być zerowy.
wartość — Wartość klucza.
klucz — Klucz wartości. Zwróć uwagę, że podczas używania kodowania klucz-wartość klucz musi być ciągiem znaków (patrz "Podstawy kodowania wartości klucza").
Dziękuję za podanie przyczyny, dla której setObject: forKey: podnosi wyjątek. @breakfreehg –
-setValue:forKey:
wystarczy wysłać -setObject:forKey:
do odbiornika, chyba że wartość jest nil
, w którym to przypadku wysyłania -removeObjectForKey
.
Martwe proste.
Dokładnie to działa. –
o masz rację, bracie. Przepraszam za to. Jest to udokumentowane tutaj: https://developer.apple.com/reference/foundation/nsmutabledictionary/1416335-setvalue?language=objc – Eddie
- 1. Objective-C: Jaka jest różnica między forKey i forKeyPath?
- 2. [__NSCFDictionary setObject: forKey:]: Metoda mutacji wysyłane do niezmiennej obiektu
- 3. Objective-C setValue: forKey na c podstawowych typów
- 4. [__NSDictionaryI setObject: forKey:]: selektor nierozpoznany wysyłane do instancji
- 5. Swift NSUserDefaults setString: forKey :?
- 6. NSDictionary setValue:
- 7. NSMutableDictionary KVO
- 8. Jaka jest różnica między właściwością Dependency Property SetValue() a SetCurrentValue()
- 9. Korzystanie z setValue (value, forKey: key) na Int? typy uruchamia metodę niezgodną z kodowaniem kodu kluczowego
- 10. setPrimitiveValue: forKey: and to-many relationships
- 11. Jaka jest różnica między NOT EXISTS a NOT IN a LEFT DOŁĄCZ, GDZIE JEST NIETA?
- 12. Ustaw wartość BOOL na NSMutableDictionary
- 13. Przekazywanie zmiennej NSInteger do NSMutableDictionary lub NSMutableArray
- 14. różnica między $ cookiestore a $ cookie in angularjs
- 15. Różnica między „a” i „gdzie” w dołącza
- 16. NSMutableDictionary Dodawanie wielu obiektów do jednego klucza
- 17. Jaka jest różnica między cholesky in numpy a scipy?
- 18. jak wstawić (Bool *) w NSMutableDictionary
- 19. Gdzie jest różnica między "transformacją" a "transformacją afiniczną"?
- 20. Jak dodać obiekt do NSMutableDictionary za pomocą klucza?
- 21. Jaka jest różnica między IEnumerable a tablicami?
- 22. Jaka jest różnica między $ a a $$ a w php?
- 23. jaka jest różnica między: %% a% zmiennymi% zmiennych?
- 24. Jaka jest różnica między [niezdefiniowanym] a [,]?
- 25. Jaka jest różnica między HAVING a WHERE?
- 26. NSManagedObject.setValue (wartość: AnyObject ?, forKey klucz: String) powoduje błąd w Swift 2.0
- 27. Różnica między obiektem a *?
- 28. Różnica między jquery a $
- 29. Jaka jest różnica między cat_id a term_id?
- 30. Jaka jest różnica między == a === w Verilog?
możliwy duplikat [Objective-C: Jaka jest różnica między objectForKey a valueForKey?] (Http://stackoverflow.com/questions/1062183/objective-c-whats-the-difference-between-objectforkey-and-valueforkey) – Mark