webentwicklung-frage-antwort-db.com.de

Prüfen Sie, ob NSDictionary leer ist

Ich möchte prüfen, ob eine NSDictionary leer ist. Ich mache das so.

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

Es stürzt jedoch immer in dieser Zeile arrCities = [mutDictValues objectForKey:@"cities"]; mit dem folgenden Fehler ab:

-[__NSCFConstantString objectForKey:]:

Kann mir jemand dabei helfen?

11
Steaphann

Beim Abrufen der Wörterbuchwerte aus NSUserDefaults wird das Wörterbuch automatisch in eine Zeichenfolge konvertiert. Dies ist der Grund dafür, dass Abstürzt und das Wörterbuch überprüft wird

[dictionary count];

EDIT: - Use 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"]);
20
Balu
if ( [mutDictValues count] == 0 ) {
    //code here
}
else {
    //code here
}

Nachdem Sie Ihr DIC abgerufen haben, sollte dies funktionieren

4
rashii

versuche dies,

if([myDict count] > 0)
    NSLog(@"Dictionary is not empty");
else
    NSLog(@"Dictionary is empty");
2
βhargavḯ

Ich hatte ein etwas anderes Thema, aber es hängt damit zusammen, also möchte ich es hier teilen.

Ich holte die Webservices ab und speicherte Daten in NSDictionary. Wieder holte ich objectForKey, was Null war. Die Lösung, die ich gefunden habe, ist also 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 für die Verwendung von NSNull war, dass es zurückkehrte (NSNull *), als ich die Anwendung debuggen konnte.

1
Aadil Keshwani

Irgendwo behandeln Sie einen NS-String (eine konkrete Unterklasse) als NS-Wörterbuch.

1
vikingosegundo

Da die meisten Antworten richtig darauf hingewiesen haben, dass Sie den nicht anerkannten Selektor objectForKey: an eine NSString-Instanz statt an NSDictionary übergeben, beachten Sie daher die Ausnahme 

-[__NSCFConstantString objectForKey:]:

Überprüfen Sie NSUserDefaults, um zu sehen, ob cities ein Wörterbuch oder etwas anderes zurückgibt. 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 im Anwendungsordner speichert. Überprüfen Sie diese Antwort für weitere Details.

Hoffentlich hilft das.

0
Amar

Sie können den folgenden Code verwenden

if(dict == nil)
{
 // blank
}else{
 // there is dictionary
}
0
GSK
BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];

int items = dict.count;

if (items > 0) {
     //not empty
}
0
William Falcon

versuchen Sie diesen Code

NSMutableDictionary *dict = ...

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