Frage

Ich habe einen solchen Fehler bekommen - *Beendigung der App aufgrund der ungekordenen Ausnahme 'nsinvalidargumentException', Grund: **-[NSCFDictionary InitWithObjects: Forkeys: Graf:]: Versuch, den Null-Wert bei Objekten einzufügen [0] (Schlüssel: durchsucht) ''

Dann habe ich den folgenden Code ausprobiert

    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"];

Und ich habe die NSLog -Nachricht als "obj is nil" bekommen.

Aber als ich den gleichen obigen Code verwendete, als OBJ NSString war und meine App aufgrund des Null -Werts beendet wurde, erhielt ich die NSLog -Nachricht als "obj ist (id) [nsnull null].

Was sind die Unterschiede zwischen NIL, NULL und [NSNULL NIL]?

Gibt es verschiedene Arten von Nullwerten? Wenn ja, wie Sie häufig auf diese Nullwerte überprüfen?

Vielen Dank :-)

War es hilfreich?

Lösung

NULL ist der ursprüngliche Wert im C-Stil, der einem Zeiger gegeben wird, der auf keine explizite Adresse hinweist. Es wird im Allgemeinen nur "uneingestaltet" oder als Sentinel -Wert.

char * oldstring = NULL;

nil ist die objektive c-Version desselben wie auf OBJ-C-Objektreferenzen angewendet:

NSString * str = nil;
id foo = nil;

Sie sind beide als gleich dem Wert Null und obwohl Sie könnte Verwenden Sie sie austauschbar, ersterer ist hauptsächlich innerhalb von OBJ-C für traditionelle Zeiger zu sehen (wie das Einstellen void * Kontextzeiger auf null) und nil wird für alle OBJ-C-Objektreferenzen verwendet.

Der Unterschied besteht darin sind konzeptionell nicht gleich als "Zeiger". Daher die Schaffung eines besonderen Sentinel für sie.

[NSNull null] ist ein Objekt das ist beabsichtigt in sehr bestimmten Fällen verwendet werden (wie das Einsetzen in Sammlungen), in denen ein "Nicht-Wert" -Wert erwünscht ist, aber tatsächlich nil ist nicht erlaubt und ein Objekt muss verwendet werden.

Beachten Sie, dass nil und NSNull Stringify sehr ähnlich: nil Stringifies as (null), und NSNull wie <null>.

Andere Tipps

[NSNull null] ist ein Wrapper für die nil Wert, den Sie in die Sammlung einfügen möchten, wenn es das ist, was Sie wollen.

Nsnull Klassenreferenz.

Sie können auch überprüfen, ob eine Objektreferenz ist nil Einfach mit ==.

Ebenfalls nil ist definiert als : #define nil NULL und ist objektiv C gleichwertig für c NULL.

Nil ist für Objektzeiger

Null ist für Nichtzeiger

Nsnull null] ist ein Objekt, das "nil" darstellt, in dem in Fällen nicht zulässig sind (wie in den Sammlungen, z. B. nsarray und nsdictionary)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top