2013-07-19 27 views
10

Ich möchte überprüfen, ob ein NSDictionary leer ist. Ich mache es so.Überprüfen, ob NSDictionary leer ist

mutDictValues = [[[NSUserDefaults standardUserDefaults] objectForKey:@"dicValues"]mutableCopy]; 
    NSLog(@"dictValues are %@",mutDictValues); 
    if(mutDictValues == NULL){ 
     arrCities = [[NSMutableArray alloc]init]; 
     NSLog(@"no cities seleceted"); 
    }else{ 
      arrCities = [[NSMutableArray alloc]init]; 
      arrCities = [mutDictValues objectForKey:@"cities"]; 
      [self placeCities]; 
    } 

Aber es alwasy stürzt auf dieser Linie arrCities = [mutDictValues objectForKey:@"cities"]; mit dem folgenden Fehler:

-[__NSCFConstantString objectForKey:]: 

jemand mir dabei helfen?

+0

if ([dictTemp isKindOfClass: [NSDictionary Klasse]]!) { // Etwas DisplayAlert (@ "Es wurden keine Daten gefunden") } – kb920

Antwort

19

While retrieving the dictionary values from NSUserDefaults that dictionary automatically converted into string that is the reason for getting crashed and for checking dictionary use

[dictionary count]; 

EDIT: - Verwendung dictionaryForKey: Methode

NSDictionary *dict =[[NSDictionary alloc]initWithObjectsAndKeys:@"hi",@"one",nil]; 
[[NSUserDefaults standardUserDefaults] setObject:dict forKey:@"dic"]; 
NSDictionary *dictn = [[NSUserDefaults standardUserDefaults] dictionaryForKey:@"dic"]; 
NSLog(@"%@",[dictn objectForKey:@"one"]); 
+0

Ist es möglich, um das als NSDictionary zurück zu bekommen? – Steaphann

+0

einmal dieses überprüfen, http: //stackoverflow.com/questions/6797096/delete-all-keys-from-a-nsuserdefaults-dictionary-iphone – Balu

+0

@Stef Geelen: überprüfen Sie meinen bearbeiteten Teil der obigen Antwort. – Balu

0
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"]; 

int items = dict.count; 

if (items > 0) { 
    //not empty 
} 
2

dies versuchen,

if([myDict count] > 0) 
    NSLog(@"Dictionary is not empty"); 
else 
    NSLog(@"Dictionary is empty"); 
1

Irgendwo behandeln Sie eine NSString (eine konkrete Unterklasse) als NSDictionary.

0

Wie die meisten Antworten haben zu Recht darauf hingewiesen, dass Sie nicht-anerkannten Selektor objectForKey: auf eine NSString Instanz statt NSDictionary sind vorbei, daher Ausnahme Beobachtung

-[__NSCFConstantString objectForKey:]: 

prüfen NSUserDefaults, um zu sehen, ob cities gibt ein Wörterbuch oder etwas anderes zurück. Sie können dies auf zwei Arten tun

I. NSLog alle Daten in NSUserDefaults

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 

II. Überprüfen Sie die PLIST-Datei, die die NSUserDefaults aus dem Anwendungsordner speichert. Überprüfen Sie this answer für weitere Details.

Hoffe, dass hilft.

2
if ([mutDictValues count] == 0) { 
    //code here 
} 
else { 
    //code here 
} 

Danach wird Ihr dic abgerufen haben, sollten

NSMutableDictionary *dict = ... 

BOOL isEmpty = ([dict count] == 0); 
0

tun versuchen, aber es verwandt ist, so kann ich es möchte hier teilen.

Ich holte die Webservices & ab, die Daten in NSDictionary & wieder holten, die objectForKey holten, der null war. So ist die Lösung fand ich wie unter

NSMutableDictionary *result = [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil]; 

    // NSLog(@"%@" , result); 

    NSMutableDictionary *sup = [result objectForKey:@"keysupplied"]; 
    NSNull *n=[NSNull null]; 
    if (sup ! = n){ 
     //Your code if its not null 
    } 

Der Grund NSNull Verwendung war es zurückkehrt (NSNull *), wenn ich die Anwendung gedebuggt so schließlich auf diese Weise heraus i.

1

ich ein anderes Problem Bit hatte diesen Code

0

Sie unter Code verwenden können

if(dict == nil) 
{ 
// blank 
}else{ 
// there is dictionary 
}