2013-07-19 224 views
10

我想檢查一個NSDictionary是否爲空。我正在這樣做。檢查NSDictionary是否爲空

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

但它在這一行arrCities = [mutDictValues objectForKey:@"cities"];,出現以下錯誤alwasy崩潰:

-[__NSCFConstantString objectForKey:]: 

有人可以幫助我?

+0

如果([dictTemp isKindOfClass:[NSDictionary的類]!){// 做一些 DisplayAlert(@ 「沒有找到數據」) } – kb920

回答

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

編輯: - 使用dictionaryForKey:方法

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

是否有可能把它作爲NSDictionary返回? – Steaphann

+0

一旦檢查這一個,http://stackoverflow.com/questions/6797096/delete-all-keys-from-a-nsuserdefaults-dictionary-iphone – Balu

+0

@Stef Geelen:檢查我編輯的上述答案的一部分。 – Balu

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

int items = dict.count; 

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

試試這個,

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

某處你治療的NSString(具體子類)作爲NSDictionary的。

0

由於大部分的答案都正確地指出,你是不是傳遞未確認的選擇objectForKey:NSString實例NSDictionary,因此觀測異常

-[__NSCFConstantString objectForKey:]: 

檢查NSUserDefaults查看是否爲cities返回字典或其他東西。您可以通過兩種方式

NSLog所有數據NSUserDefaults

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

II做到這一點。檢查存儲應用程序文件夾中的NSUserDefaults的plist文件。查詢this answer瞭解更多詳情。

希望有所幫助。

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

有你的DIC檢索這應該做

0

試試這個代碼

NSMutableDictionary *dict = ... 

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

我有一點不同的問題,但是,所以我想在這裏分享它關係之後。

我正在提取web服務&將數據存儲在NSDictionary中&再次獲取爲空的objectForKey。所以我找到了解決辦法是在

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 
    } 

背後使用NSNull的原因是它被返回(NSNull *)當我調試,所以我終於想通了,這樣的應用程序。

0

您可以使用下面的代碼

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