objective-c nsdictionary

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.