Pregunta

Tengo un error como este: * Terminación de la aplicación debido a uncaught exception 'NSInvalidArgumentException', la razón:**-[NSCFDictionary initWithObjects:forKeys:conde:]:intente insertar un valor nulo a objetos[0] (clave:la búsqueda)'

Luego probé con el código de abajo

    if (Obj == (id)[NSNull null])  //Obj is an id 
{
    NSLog(@" Obj is (id)[NSNull null]");    
}
else if (Obj == nil)
{
    NSLog(@"Obj is nil");   
} 
else if (Obj == NULL)
{
    NSLog(@"Obj is NULL");  
} 
else
{
    NSLog(@"Obj is something else");
}

searchedDict = [NSDictionary dictionaryWithObject:Obj forKey:@"searched"];

Y tengo la NSLog mensaje como Obj es nil'.

Pero cuando he utilizado el mismo código anterior cuando Obj fue NSString y mi aplicación se ha terminado debido a un valor nulo, tengo la NSLog mensaje como Obj es (id)[NSNull null]'.

¿Cuáles son las diferencias entre el valor nulo, NULO y [NSNULL nil] ?

Hay diferentes tipos de valores Nulos?si sí, Cómo comprobar la frecuencia para estos valores null?

Gracias :-)

¿Fue útil?

Solución

NULL es el original de estilo C es el valor de un puntero que se considera que no explícito de la dirección.Es generalmente usado para significar "unset" o como un valor de centinela.

char * oldstring = NULL;

nil es el Objetivo-C versión de lo mismo aplicado a Obj-C referencias de objeto:

NSString * str = nil;
id foo = nil;

Ambos están definidos para ser igual al valor cero, y aunque podría utilizar de forma indistinta, el primero es visto principalmente en Obj-C de la tradicional punteros (como el ajuste void * contexto punteros a NULL) y nil se utiliza para todos los Obj-C referencias a objetos.

La diferencia existe porque aunque Obj-C de la sintaxis sucede a montar en la parte superior de C, el diseño de la lengua es de nivel superior, y sus Identificadores de objeto no son conceptualmente lo mismo simplemente como "punteros".Por lo tanto la creación de un centinela para ellos.

[NSNull null] es un objeto esa es la intención se utiliza en muy determinados casos (como la inserción en las colecciones), donde un "no-valor" valor deseado, pero real nil no está permitido, y un objeto debe ser utilizado.

Tenga en cuenta que nil y NSNull stringify de manera muy similar: nil stringifies como (null), y NSNull como <null>.

Otros consejos

[NSNull null] es un envoltorio para el nil Valor que desea insertar en la colección, si es lo que desea.

Nsnull Referencia de clase.

También puede verificar antes si una referencia de objeto es nil simplemente con ==.

También nil Se define como : #define nil NULL y es objetivo C equivalente para c NULL.

Nulo es para punteros de objetos

Nulo es para no punteros

NSNULL NULL] es un objeto que representa "nulo" que se utilizará en los casos de que los valores nulos no están permitidos (como lo señaló Vince, como en colecciones, por ejemplo, nsArray y nsdictionary)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top