Guardando la documentazione, non vedo grandi differenze. Sia "valore" che "oggetto" sono di tipo ID, quindi può essere qualsiasi oggetto. La chiave è una volta una stringa, e nell'altro caso un id. Uno di loro sembra mantenere l'oggetto e l'altro no. Cos'altro? Qual è il caso?Dov'è la differenza tra setObject: forKey: e setValue: forKey: in NSMutableDictionary?
risposta
setValue:forKey:
fa parte del protocollo NSKeyValueCoding, che tra le altre cose consente di accedere alle proprietà dell'oggetto da Like Builder. setValue:forKey:
è implementato in classi diverse da NSDictionary
.
setObject:forKey:
è NSMutableDictionary's
motivo di esistere. La sua firma sembra essere abbastanza simile a setValue: forKey :, ma è più generico (ad esempio, qualsiasi tipo di chiave). È in qualche modo una coincidenza che le firme siano così simili.
Ciò che aggiunge confusione è che l'implementazione di NSMutableDictionary di setValue:forKey:
equivale a setObject:forKey:
nella maggior parte dei casi. In altre classi, setValue:forKey:
modifica le variabili membro. In NSMutableDictionary
, cambia le voci del dizionario, a meno che non si precisi la chiave con un carattere '@' - nel qual caso modifica le variabili membro.
Così, in poche parole, utilizzare setObject:forKey:
quando si ha bisogno di lavorare con le chiavi del dizionario e valori, e setValue:forKey:
nei casi più rari in cui è necessario affrontare KVP.
EDIT: e oh, sembra che questo è stato chiesto e ha risposto prima: Difference between objectForKey and valueForKey?
questa domanda non è esattamente la stessa.si tratta dei metodi getter, mentre questa domanda riguarda i metodi setter – user102008
Cosa intendi con "In NSMutableDictionary, cambia le voci del dizionario, a meno che tu non prefissi la chiave con un carattere '@' - nel qual caso modifica le variabili membro ". Quali variabili membro? Potresti anche commentare http://stackoverflow.com/questions/5755917/? Grazie. –
solo per completezza, setObject: forKey solleverà (eccezione) se l'oggetto è nullo. SetValue: forKey si comporta allo stesso modo o rimuove l'oggetto esistente dal dizionario quando si imposta nil per la chiave? –
Un'altra differenza è che se si dà un valore nullo per setValue:forKey:
, rimuove la chiave dal dizionario se esiste, altrimenti non fa niente. Ma se dai un valore nullo a setObject:forKey:
, solleva un'eccezione.
Questo è super utile da sapere. Ho altrimenti scritto la mia categoria su NSMutableDictionary per realizzare esattamente questo !. Grazie – Arman
Un'altra differenza è con l'indice obbiettivo-c, puoi scrivere 'dic [chiave] = valore;' per supportare la rimozione della chiave se il valore è 'nil'. La sottoscrizione è generalmente un approccio migliore rispetto a "setValue: forKey:" per ottenere questo risultato. –
anObject — Il valore per chiave. L'oggetto riceve un messaggio di conservazione prima di essere aggiunto allo NSDictionary
. Questo valore non deve essere nulla.
aKey — La chiave per il valore. La chiave viene copiata (utilizzando copyWithZone:
; le chiavi devono essere conformi al protocollo NSCopying
). La chiave non deve essere nulla.
valore — Il valore per chiave.
chiave — La chiave per il valore. Si noti che quando si utilizza la codifica del valore chiave, la chiave deve essere una stringa (vedere "Nozioni fondamentali sulla codifica dei valori-chiave").
Grazie per aver dato il motivo per cui setObject: forKey: solleva un'eccezione. @ breakfreehg –
-setValue:forKey:
solo inviare -setObject:forKey:
al ricevitore, a meno che il valore è nil
, nel qual caso inviare -removeObjectForKey
.
Morto semplice.
Questo è esattamente come funziona. –
oh hai ragione, fratello. Mi dispiace per quello È documentato qui: https://developer.apple.com/reference/foundation/nsmutabledictionary/1416335-setvalue?language=objc – Eddie
- 1. Impossibile impostare setObject: forKey: in NSMutableDictionary
- 2. Does [NSMutableDictionary setValue: value forKey: key] conserva la chiave NSString?
- 3. Objective-C: Qual è la differenza tra forKey e forKeyPath?
- 4. Perché utilizzare registerDefaults: anziché setValue: forKey :?
- 5. [__NSCFDictionary setObject: Forkey:]: metodo di mutazione inviati oggetto immutabile
- 6. [__NSDictionaryI setObject: Forkey:]: selettore non riconosciuto inviato ad esempio
- 7. Swift NSUserDefaults setString: forKey :?
- 8. NSDictionary setValue:
- 9. Utilizzo di setValue (valore, forKey: chiave) su Int? tipi attiva metodo di codifica senza valore chiave
- 10. Utilizzo di riflessione per impostare le proprietà dell'oggetto senza utilizzare setValue Forkey
- 11. NSMutableDictionary KVO
- 12. Qual è la differenza tra Dependency Property SetValue() e SetCurrentValue()
- 13. Come aggiungo l'oggetto a NSMutableDictionary con la chiave?
- 14. Passando variabile NSInteger a NSMutableDictionary o NSMutableArray
- 15. Imposta valore BOOL su NSMutableDictionary
- 16. come inserire un (BOOL *) in NSMutableDictionary
- 17. NSUserDefaults. setValue funziona, non setBool
- 18. NSMutableDictionary Aggiunta di più oggetti a un tasto
- 19. NSManagedObject.setValue (valore: ANYOBJECT ?, Forkey chiave: String) provoca un errore nel Swift 2.0
- 20. Come posso ottenere l'ordine originale di NSDictionary/NSMutableDictionary?
- 21. Posso utilizzare NSCoder :: encodeInteger: forKey: e decodeIntegerForKey: metodi con argomento di tipo NSUInteger?
- 22. creando formato JSON in Objective C
- 23. La differenza tra $ * e $ @
- 24. Genera coppia di chiavi su iPhone e di stampa per accedere come NSString
- 25. Qual è lo scopo del parametro "forKey" quando si aggiunge un CAAnimation a un layer?
- 26. iPhone - Ottieni il nome della città da Latitude e Longtiude
- 27. Come aggiungereObject di NSMutableDictionary a NSMutableArray in un ciclo
- 28. SimpleStringProperty set() vs. setValue()
- 29. Come utilizzare ECC in iOS
- 30. Come disattivare NSDictionary Ordina automaticamente key wise
possibile duplicato di [Objective-C: Qual è la differenza tra objectForKey e valueForKey?] (Http://stackoverflow.com/questions/1062183/objective-c-whats-the-difference-tra-objectforkey-and-valforforkey – Mark