If we have an API that requires only 2 out of an objects 5 properties and iPhone app doesn't require them to instantiate an object, when the object is used in the params NSDicitionary the app will crash. I was told NSDictionary will not let you assign nil values, as when it reaches nil it thinks its finished. Does objective-c have a way to spit out an objects non-nil properties into an NSDictionary?
Example:
[Drunk alloc] init];
drunk.started_drinking = [NSDate date];
drunk.stopped_drinking (we don't set this because he is still a drunk)
drunk.fat = YES;
drunk.dumb = YES;
parameters:@{
@"auth_token" :token,
@"name" : drunk.name, @"date_started" : drunk.started_drinking,
@"date_stopped" : drunk.stopped_drinking,
@"prescribing_doctor" : drunk.fat,
@"pharmacy" : drunk.dumb
}
This will crash when it gets to the stopped_drinking property. Any suggestions on how to handle this?
You cannot insert
nil
into collections (dictionaries, arrays, index sets, etc).You can, however, insert
[NSNull null]
into them as this is what they made it forInserting objects into the dictionary becomes quite easy (if the property is
nil
, insert anNSNull
instead). Then, when pulling things out of the dictionary, a quickif(myReturnedObject == [NSNull null])
will tell you if the returned value is valid, asNSNull
is a singleton and thus everyNSNull
is in fact the same object.Edit: Paul.s has an excellent example of insertion behavior for your case, complete with ternary operator usage.
Edit Again: Despite the below comment, it is factually confirmed in the Apple docs linked above that NSNull does not crash when added to collections.
It's a bit long winded but you could do