Вставка нулевых объектов в NSDictionary
Если у нас есть API, для которого требуется только 2 из объектов 5 свойств и приложение для iPhone, им не требуется, чтобы они создавали экземпляр объекта, когда объект используется в параметрах NSDicitionary, приложение будет аварийно завершено. Мне сказали, что NSDictionary не позволит вам назначать нулевые значения, так как когда он достигает нуля, он думает, что его закончили. Имеет ли objective-c способ выплескивать объекты не-nil-свойств в NSDictionary?
Пример:
[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
}
Это приведет к сбою, когда он перейдет в свойствостановочное_разрушение. Любые предложения о том, как с этим справиться?
Ответы
Ответ 1
Это немного длиннее, но вы могли сделать
static id ObjectOrNull(id object)
{
return object ?: [NSNull null];
}
parameters:@{
@"auth_token" : ObjectOrNull(token),
@"name" : ObjectOrNull(drunk.name),
@"date_started" : ObjectOrNull(drunk.started_drinking),
@"date_stopped" : ObjectOrNull(drunk.stopped_drinking),
@"prescribing_doctor" : ObjectOrNull(drunk.fat),
@"pharmacy" : ObjectOrNull(drunk.dumb),
}
Ответ 2
Вы не можете вставить nil
в коллекции (словари, массивы, наборы индексов и т.д.).
Однако вы можете вставить [NSNull null]
в них, поскольку это что они сделали для
Вставка объектов в словарь становится довольно простой (если свойство nil
, вместо этого вставьте NSNull
). Затем, вытаскивая вещи из словаря, быстрый if(myReturnedObject == [NSNull null])
скажет вам, верно ли возвращаемое значение, поскольку NSNull
является одноэлементным и, следовательно, каждый NSNull
фактически является тем же самым объектом.
Изменить: У Paul.s отличный пример поведения вставки для вашего случая, в котором используется тройное использование оператора.
Изменить снова:. Несмотря на приведенный ниже комментарий, это фактически подтверждено в документах Apple, связанных выше, что NSNull не сбой при добавлении в коллекции.