2013-07-19 16 views
10

Voglio verificare se uno NSDictionary è vuoto. Lo sto facendo in questo modo.Controllare se NSDictionary è vuoto

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

Ma alwasy si blocca su questa linea arrCities = [mutDictValues objectForKey:@"cities"]; con il seguente errore:

-[__NSCFConstantString objectForKey:]: 

qualcuno può aiutarmi con questo?

+0

if ([dictTemp isKindOfClass: [class NSDictionary]]!) {// fare qualcosa DisplayAlert (@ "Nessun dato trovato") } – kb920

risposta

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: - uso dictionaryForKey: metodo

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

E 'possibile per ottenere questo come NSDictionary? – Steaphann

+0

dopo aver controllato questo, http: //stackoverflow.com/questions/6797096/delete-all-keys-from-a-userdefaults-dictionary-iphone – Balu

+0

@Stef Geelen: controlla la mia parte modificata della risposta di cui sopra. – Balu

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

int items = dict.count; 

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

provare questo,

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

qualche parte si trattano un NSString (una sottoclasse calcestruzzo) come NSDictionary.

0

Come la maggior parte delle risposte hanno giustamente sottolineato che si sta passando non-riconosciuta selettore objectForKey: a un'istanza NSString invece di NSDictionary, quindi osservando eccezione

-[__NSCFConstantString objectForKey:]: 

Controllare NSUserDefaults per vedere se cities restituisce un dizionario o qualcos'altro. È possibile farlo in due modi

I. NSLog tutti i dati in NSUserDefaults

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

II. Controllare il file plist che memorizza NSUserDefaults dalla cartella dell'applicazione. Controlla this answer per maggiori dettagli.

Spero che questo aiuti.

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

Dopo aver vostro DIC recuperato questo dovrebbe fare

0

provare questo codice

NSMutableDictionary *dict = ... 

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

Ho avuto un problema po 'diverso, ma è legato in modo che io vorrei condividere qui.

Stavo recuperando i servizi web & memorizzando i dati in NSDictionary & di nuovo Recupero objectForKey che era Nullo. Quindi la soluzione che ho trovato è come sotto

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 ragione che sta dietro all'uso NSNull era era di ritorno (NSNull *) quando ho il debug dell'applicazione Così ho finalmente capito in questo modo.

0

È possibile utilizzare il codice qui sotto

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