检查NSDictionary是否为空

17

我想检查一个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:]:

有人能帮我解决这个问题吗?


如果 (![dictTemp isKindOfClass:[NSDictionary class]]) { // 做一些事情 DisplayAlert(@"未找到数据") } - kb920
9个回答

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

能否将其转换为NSDictionary返回? - Steaphann
请检查以下内容:https://dev59.com/I2w15IYBdhLWcg3wJ4cR - Balu
如果 (![dictTemp isKindOfClass:[NSDictionary class]]) { // 做一些事情 DisplayAlert(@"未找到数据") } - kb920

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

在检索到您的字典后,应执行以下操作。

2

试一下这个:

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

1

我遇到了一个略有不同的问题,但与此相关,所以我想在这里分享一下。

我正在获取Web服务并将数据存储在NSDictionary中,然后再次获取objectForKey,但其值为Null。所以我找到的解决方案如下:

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 *),所以我最终找到了这种方法。

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

int items = dict.count;

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

1

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


0
if (myDict.count)
    NSLog(@"Dictionary is not empty");
else
    NSLog(@"Dictionary is empty");

每个数字都等于@NO,如果是0
每个不是0的数字都等于@YES
因此,您可以将计数器直接传递到if中。

0

正如大多数答案所指出的那样,您正在将未被识别的选择器objectForKey:传递给NSString实例,而不是NSDictionary,因此观察到异常

-[__NSCFConstantString objectForKey:]:

检查 NSUserDefaults 是否返回字典或其他内容。您可以通过两种方式来完成此操作

I. 在 NSUserDefaults 中记录所有数据,使用 NSLog

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

II. 检查应用程序文件夹中存储NSUserDefaults的plist文件。请参阅this answer以获取更多详细信息。

希望这有所帮助。


0

试试这段代码

NSMutableDictionary *dict = ...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接