2010-03-08 19 views
11

SO Ich möchte überprüfen, ob das Element in meinem Array [clientDataArray objectForKey:@"ClientCompany"]nil ist.Objective-C wie überprüft man, ob eine Zeichenkette null ist

temp = [clientDataArray objectForKey:@"ClientCompany"]; 
    if (temp != [NSNull null]) infofieldCompany.text = temp; 

Bisher habe ich in der Lage gewesen, dies durch den obigen Code zu erreichen, aber es gibt mir die Warnungen

  • Warnung: NSArray nicht zu -objectForKey:
  • Warnung reagieren: Vergleich verschiedener Objective-C-Typen struct NSNull * und struct NSString * fehlt ein Guss

Mein Hauptinteresse ist die zweite Warnung, aber die erste Warnung interessiert mich auch. Wie soll ich meinen obigen Code anpassen?

+0

Die clientDataArray war eigentlich ein NSDictionary, wurde aber erklärt als Array, also die Warnung. – oberbaum

Antwort

19

Ihre erste Warnung sieht so aus, als würden Sie versuchen, objectForKey über eine NSArray anzurufen. Was nicht funktioniert, da NSArray keine objectForKey Methode hat.

Was die zweite Warnung Sie nur mit null direkt vergleichen kann, das heißt:

if (temp != nil) 

oder da null auf 0 äquivalent ist, können Sie auch einfach einmal:

if (temp) 
+0

Ja, ich hätte das tun sollen. Nett und einfach auch. Die erste Zeile, die ich gepostet habe, funktioniert zwar gut, aber ich werde darüber nachdenken. – oberbaum

+0

Bitte beachten Sie, dass dies nicht geschieht, wenn temp ein NSString ist. Benutze Robinsons 'Antwort – Abramodj

0

Ich denke, das Problem ist (ich meine die zweite Warnung) ist, dass Sie NSString-Objekt vergleichen, das auf ein NSNull-Objekt auf Null festgelegt werden konnte.

Haben Sie die übliche C-Methode zum Überprüfen auf Null ausprobiert?

if(temp) { 
// It's not null, do something. 
} 

Ich bin mir nicht 100% sicher, aber Sie könnten es versuchen. Wenn Sie das getan haben, können wir Ihnen leider keine weiteren nützlichen Informationen liefern.

Viel Glück!

14

Die beiden zuvor gegebenen Antworten haben einen grundlegenden Punkt verfehlt: Sie können nil nicht in ein Array einfügen, so dass Sie nil niemals aus einem Array erhalten. Verwenden als Platzhalter in einem Array ist die richtige Sache zu tun, aber Ihre Variable temp kann dann nicht als NSString * deklariert werden, da es nicht eins sein kann. Verwenden Sie entweder NSObject * oder id als den Typ der Variablen, um die Vergleichswarnung zu unterdrücken.

+3

oder tue [string isEqual: [NSNull null]] –

0

Die Singleton kann verwendet werden, um "verschachtelte" Arrays wie obj0, obj1, obj2, NSNull, obj3, NSNull, ..., nil zu erstellen.

Warnung: 'NSArray' nicht zu'-objectForKey antworten:‘

NSArray nicht implementiert objectForKey.
Ihr Code stürzt zur Laufzeit ab (wenn clientDataArray zugewiesen und initialisiert wurde) Sie können auf Array-Elemente nach Index zugreifen (objectAtIndex:).
Wenn Sie Objekte mit Schlüsseln verknüpfen müssen, werfen Sie einen Blick auf NSDictionary.

0

if (! Temp = nil)

oder da null auf 0 äquivalent ist, können Sie auch einfach:

if (Temp)

Ich bin nicht durch eine Dehnung der Phantasie ein Obj-C oder Kakao Experte, in C/C++ können Sie etwas wie verwenden:

if (somePtr! = NULL)

Und wenn Sie es nicht explizit auf NULL setzen oder ändern, was es zeigte, können Sie sicher sein, dass es in der Tat Not Null oder Null ist (was immer Sie suchten ...)

Aber ich habe bemerkt, (meine persönliche Erfahrung sowieso), dass in Obj-C,

wenn Sie so etwas wie: if (someObj = nil!) oder das gegenteil,

es gibt keine Garantie, es, wird Ihnen sagen, es ist REAL Status ...

Also (nach dem Umgang mit einer Reihe von c Ausschlag) Wenn ich mich mit Obj-C (BS) beschäftige, um sicher zu sein, habe ich immer eine BOOL oder Flagge, um ihren Status zu verfolgen, damit du nicht am Ende freisichst, entschuldige ... "Release- ing“etwas, das ausgeplant werden bereits ...

16

Nachdem alle Optionen versuchen, ich glaube, dies ist die beste Option NSString null comapre

if (temp != (NSString *) [ NSNull null ]) 
{ 
    // do some thing 
} 
+0

Welche Vorteile hat das gegenüber 'temp! = Nil'? – Matthew

0

Auch wenn diese Frage ist alt, ich meine Antwort hoffen wird einem anderen helfen.

können Sie versuchen, diese

temp = [clientDataArray objectForKey:@"ClientCompany"]; 
if (![temp isKindOfClass:[NSNull class]]) infofieldCompany.text = temp; 
2

Die beste Lösung NULL oder leere Werte zu testen:

if (yourObj.yourString == (NSString*) [NSNull null] || yourObj.yourString.length == 0) 
{ 
    yourObj.yourString = @""; 
} 
1

Quiet einfach

if (myString == nil){ 
    NSLog(@"myString is null"); 
} 
Verwandte Themen