2013-07-19 182 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 
}