This might be very basic question but I was wondering why can't I assign nil as NSDictionary value? I have following statement many places in my code. If [q objectForKey:@"text"]
is nil then App is crashing.
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:2]; [dict setObject:[q objectForKey:@"text"] forKey:@"text"];
I have to check everywhere for the nil before assigning it to dictionary. Is this the only correct way of doing? Am I missing something obvious?
if([q objectForKey:@"text"] != nil) [dict setObject:[q objectForKey:@"text"] forKey:@"text"]; else [dict setObject:@"" forKey:@"text"];
It wants an actual object... use NSNull
[NSNull null];
setValue:forKey
but it removes the key.If you want to be able to set a key to nil
you could use setValue:forKey:
which will remove the key if you set it to nil
(quote from documentation below). Note the Value instead of Object.
setValue:forKey:
Adds a given key-value pair to the dictionary.
Discussion...
This method adds value and key to the dictionary using
setObject:forKey:
, unless value isnil
in which case the method instead attempts to remove key usingremoveObjectForKey:
.
When you later try and get the object using objectForKey:
for the key that you removed by setting it to nil
you will get nil
back (quote from documentation below).
Return value:The value associated with aKey, or nil if no value is associated with aKey.
Note: The key will not actually be present in the dictionary so it won't be obtained using allKeys
; or be enumerated over.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With