web-dev-qa-db-fra.com

Vérifiez si NSDictionary est vide

Je veux vérifier si une NSDictionary est vide. Je le fais comme ça.

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

Mais il se bloque toujours sur cette ligne arrCities = [mutDictValues objectForKey:@"cities"]; avec l'erreur suivante:

-[__NSCFConstantString objectForKey:]:

Quelqu'un peut il m'aider avec ça ?

11
Steaphann

Lors de la récupération des valeurs de dictionnaire de NSUserDefaults, le dictionnaire Est automatiquement converti en chaîne indiquant le blocage de Et permet de vérifier l'utilisation du dictionnaire.

[dictionary count];

EDIT: - Utilise dictionaryForKey: method

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
}

Après avoir récupéré votre dic, cela devrait faire

4
rashii

essaye ça,

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

J'ai eu un problème un peu différent mais il est lié donc je voudrais le partager ici.

Je récupérais les services Web et stockais les données dans NSDictionary, puis à nouveau Obtention de objectForKey qui était Null. Donc, la solution que j'ai trouvée est comme sous

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
    }

La raison derrière l’utilisation de NSNull était qu’elle revenait (NSNull *) lorsque j’ai mis au point l’application. Donc j’ai enfin compris de cette façon.

1
Aadil Keshwani

Quelque part, vous traitez une nsstring (une sous-classe concrète) comme NSdictionary.

1
vikingosegundo

Comme la plupart des réponses ont correctement fait remarquer que vous transmettez le sélecteur non reconnu objectForKey: à une instance NSString au lieu de NSDictionary, d'où l'observation d'une exception. 

-[__NSCFConstantString objectForKey:]:

Cochez NSUserDefaults pour voir si cities renvoie un dictionnaire ou autre chose. Vous pouvez le faire de deux manières 

I. NSLog toutes les données dans NSUserDefaults

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

II. Vérifiez le fichier plist qui stocke la NSUserDefaults à partir du dossier Application. Vérifiez cette réponse pour plus de détails.

J'espère que cela pourra aider.

0
Amar

Vous pouvez utiliser le code ci-dessous

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

essayez ce code

NSMutableDictionary *dict = ...

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