2013-07-19 18 views
10

Chcę sprawdzić, czy NSDictionary jest pusty. Robię to w ten sposób.Sprawdź, czy NSDictionary jest pusty

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

Ale zawsze pełen wypadków na tej linii arrCities = [mutDictValues objectForKey:@"cities"]; z powodu następującego błędu:

-[__NSCFConstantString objectForKey:]: 

Czy ktoś może mi pomóc z tym?

+0

if ([dictTemp isKindOfClass: [NSDictionary klasa]]!) {// zrób coś DisplayAlert (@ "Brak danych") } – kb920

Odpowiedz

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: - użycie dictionaryForKey: metoda

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

Czy to możliwe odzyskać to jako NSDictionary? – Steaphann

+0

raz sprawdzić ten, http: //stackoverflow.com/questions/6797096/delete-all-keys-from-a-nsuserdefaults-dictionary-iphone – Balu

+0

@Stef Geelen: sprawdź moją edytowaną część powyższej odpowiedzi. – Balu

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

int items = dict.count; 

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

spróbować,

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

Gdzieś ty traktować NSString (betonowy podklasy) jako NSDictionary.

0

Ponieważ większość odpowiedzi słusznie wskazał, że trzeba przejechać przez ONZ uznawane selektor objectForKey: do instancji NSString zamiast NSDictionary, stąd obserwujemy wyjątek

-[__NSCFConstantString objectForKey:]: 

Sprawdź NSUserDefaults, aby zobaczyć, czy cities zwraca słownik lub coś innego. Można to zrobić na dwa sposoby

I. NSLog wszystkie dane w NSUserDefaults

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

II. Sprawdź plik plist przechowujący NSUserDefaults z folderu aplikacji. Aby uzyskać więcej informacji, sprawdź numer this answer.

Nadzieję, że pomaga.

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

Po pobraniu swoją DIC powinno to zrobić

0

wypróbować ten kod

NSMutableDictionary *dict = ... 

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

Miałem trochę inny problem, ale jest to związane więc chciałbym to zrobić tutaj.

Przybywałem serwisów WWW & zapisywanie danych w NSDictionary & ponownie Pobieranie obiektu objectForKey o wartości Null. Więc znalazłem rozwiązanie jest pod

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 
    } 

Powodem korzystania NSNull było wracał (NSNull *) kiedy debugowania aplikacji więc w końcu zorientowali się w ten sposób.

0

Możesz skorzystać z poniższego kodu

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