检查NSDictionary是否为空

时间:2013-07-19 11:45:18

标签: iphone ios objective-c nsmutablearray 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"];崩溃了,出现以下错误:

-[__NSCFConstantString objectForKey:]:

有人可以帮我这个吗?

9 个答案:

答案 0 :(得分:22)

  

从NSUserDefaults中检索字典值时   字典自动转换为字符串,这是原因   崩溃和检查字典使用

[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"]);

答案 1 :(得分:4)

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

在检索到你的dic后,应该这样做

答案 2 :(得分:2)

试试这个,

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

答案 3 :(得分:1)

在某处你将nsstring(一个具体的子类)视为NSdictionary。

答案 4 :(得分:1)

我有一个不同的问题,但它是相关的,所以我想在这里分享。

我正在抓取网络服务&在NSDictionary&中存储数据再次获取Null的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 *)所以我终于弄清楚了这一点。

答案 5 :(得分:0)

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

int items = dict.count;

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

答案 6 :(得分:0)

由于大多数答案都正确地指出您将未识别的选择器objectForKey:传递给NSString实例而不是NSDictionary,因此观察异常

-[__NSCFConstantString objectForKey:]:

检查NSUserDefaults以查看cities是否返回字典或其他内容。你可以通过两种方式做到这一点

予。 NSLog

中的所有数据NSUserDefaults
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);

II。检查从Application文件夹中存储NSUserDefaults的plist文件。查看this answer了解详情。

希望有所帮助。

答案 7 :(得分:0)

试试这段代码

NSMutableDictionary *dict = ...

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

答案 8 :(得分:0)

您可以使用以下代码

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