objective c - Inserción de objetos nulos en un NSDictionary
nsdictionary to object swift (2)
Si tenemos una API que requiere solo 2 de las propiedades de los objetos 5 y la aplicación del iPhone no requiere que ejemplifiquen un objeto, cuando el objeto se usa en los parámetros. Me dijeron que NSDictionary no le permitirá asignar valores nulos, ya que cuando llega a cero, cree que está terminado. ¿Tiene object-c una forma de escupir las propiedades de un objeto no nulas a un NSDictionary?
Ejemplo:
[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
}
Esto se bloqueará cuando llegue a la propiedad detenido. ¿Alguna sugerencia sobre cómo manejar esto?
Es un poco largo aliento pero podrías hacerlo
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),
}
No puede insertar nil
en colecciones (diccionarios, matrices, conjuntos de índices, etc.).
Sin embargo, puede insertar [NSNull null]
en ellos, ya que esto es lo que hicieron para
Insertar objetos en el diccionario se vuelve bastante fácil (si la propiedad es nil
, inserte un NSNull
en NSNull
lugar). Luego, cuando saque cosas del diccionario, un rápido if(myReturnedObject == [NSNull null])
le dirá si el valor devuelto es válido, ya que NSNull
es un singleton y, por lo tanto, cada NSNull
es el mismo objeto.
Edición: Paul.s tiene un excelente ejemplo de comportamiento de inserción para su caso, completo con el uso ternario del operador .
Edite de nuevo: a pesar del comentario a continuación, se confirma de hecho en los documentos de Apple vinculados anteriormente que NSNull no se bloquea cuando se agrega a las colecciones.