【问题标题】:Check if NSDictionary is empty检查 NSDictionary 是否为空
【发布时间】:2013-07-18 16:40:21
【问题描述】:

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

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

【问题讨论】:

  • if (![dictTemp isKindOfClass:[NSDictionary class]]) { // 做某事 DisplayAlert(@"No data found") }

标签: iphone ios objective-c nsmutablearray nsdictionary


【解决方案1】:
if (myDict.count)
    NSLog(@"Dictionary is not empty");
else
    NSLog(@"Dictionary is empty");

0 的每个数字都等于 @NO

每个不是0 的数字都等于@YES

因此,您只需将计数传递给if

【讨论】:

    【解决方案2】:
    if ( [mutDictValues count] == 0 ) {
        //code here
    }
    else {
        //code here
    }
    

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

    【讨论】:

      【解决方案3】:

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

      我正在获取 Web 服务并将数据存储在 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 *) 所以我终于想出了这个办法。

      【讨论】:

        【解决方案4】:

        试试这个代码

        NSMutableDictionary *dict = ...
        
        BOOL isEmpty = ([dict count] == 0);
        

        【讨论】:

          【解决方案5】:
          BOOL containsKeyABC = [myDict: valueForKey:@"ABC"];
          
          int items = dict.count;
          
          if (items > 0) {
               //not empty
          }
          

          【讨论】:

            【解决方案6】:

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

            -[__NSCFConstantString objectForKey:]:
            

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

            我。 NSLogNSUserDefaults中的所有数据

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

            二。检查存储应用程序文件夹中NSUserDefaults 的plist 文件。详情请查看this answer

            希望对您有所帮助。

            【讨论】:

              【解决方案7】:

              从 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 取回?
              • if (![dictTemp isKindOfClass:[NSDictionary class]]) { // 做某事 DisplayAlert(@"No data found") }
              【解决方案8】:

              您将 nsstring(具体子类)视为 NSdictionary。

              【讨论】:

                【解决方案9】:

                试试这个,

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-08-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-01-12
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-12-23
                  相关资源
                  最近更新 更多