【问题标题】:How to check NSArray is null or empty in iOS?如何在 iOS 中检查 NSArray 是否为空或为空?
【发布时间】:2011-05-09 04:31:36
【问题描述】:

一个NSArray被alloc和init后,如果NSArray没有添加任何东西,如何判断它是null还是空?

谢谢。

【问题讨论】:

    标签: iphone ios ipad


    【解决方案1】:
    if (array == nil || [array count] == 0) {
        ...
    }
    

    【讨论】:

    • 在处理对象时应该使用nil(参见stackoverflow.com/questions/557582/null-vs-nil-in-objective-c)。
    • 你应该两者都做吗?或者如果数组为 nil,[array count] == 0 会返回 TRUE 吗?
    • 不,你不需要两者。通过 nil 对象发送消息在 Objective-C 中被忽略,将产生 0。所以if ([array count] == 0) { ... }就够了。
    • @trojanfoe 向 nil 发送消息不会被忽略,而是具有严格的预定义行为。在这种情况下,'count' 消息应该返回一个 NSInteger - 所以它就是这样做的。返回零 (0)。
    • @MottiShneor 向nil 发送消息会被有效地忽略。好的?它不会像几乎所有其他语言一样崩溃。
    【解决方案2】:

    NSArray 有 count 方法,一个常见的方法是......

    if (![self.myArray count])
    {
    }
    

    这将检查数组中是否没有任何内容,或者是否设置为 nil。

    【讨论】:

    • 如果myArray为nil,会不会因为空指针异常而崩溃?
    • @OMGPOP:不,它没有
    【解决方案3】:

    虽然我们都抛出了相同的答案,但我想我也会这样做。

    if ([array count] < 1) {
        ...
    }
    

    【讨论】:

    • +1 表示匿名反对(除了某些人的个人偏好)与其他人一样好和正确的响应。之所以可行,是因为在这种情况下,如果数组是 nil,objc 消息将返回 0——它的定义很好。
    • 感谢您的支持。除了应该忽略的诙谐评论之外,我真的不明白为什么我应该投反对票,因为唯一重要的是代码。
    • 为什么
    【解决方案4】:

    还有一个

    if(!array || array.count==0)
    

    【讨论】:

    • 这意味着数组不是零。但它仍然可能为空,因此符合逻辑或检查计数是否为 0。如果数组为 nil (!array),则甚至不会计算第二部分。
    • array.count 如果 array 为 nil,则为 0。这是明确定义的 Objective-C 行为。 Objective-C 中过多的 nil 检查主要是由 Java/C# 开发人员继承的。
    【解决方案5】:

    if([myarray count]) 检查非空数组和空数组。

    【讨论】:

      【解决方案6】:

      试试这个

      if(array == [NSNull null] || [array count] == 0) {
      }
      

      【讨论】:

      • (array == [NSNull null]) 和 (array == nil) 有什么区别?
      • @user403015 [NSNull null]NSNull 类型的对象。因此,如果array == [NSNull null],则array 是指向该NSNull 单例对象的指针。 [NSNull null 经常用于存储对象(例如在字典或数组中),而 nil 将不被接受。如果array == nil 则意味着array 被清零(指向0x0)。
      • @OhhMee 我不知道谁投了反对票,但这可能是因为array == [NSNull null] 不是一个非常有用的检查,因为例如如果alloc 和init 失败,它将是@987654332 @,不是[NSNull null]。鉴于 user403015 概述的场景,[NSNull null] 不是可能出现的场景。
      【解决方案7】:
      if([arrayName count]==0)
      {
          //array is empty.
      }
      else
      {
         //array contains some elements.
      }
      

      【讨论】:

        【解决方案8】:

        你可以用这个:

        if (!anArray || [anArray count] == 0) {
            /* Your code goes here */
        }
        

        【讨论】:

        • @Joel 请解释投反对票的原因。
        • 虽然询问您被否决的原因是合法的(我也会这样做),但您不应该不要贸然下结论。我很确定我没有投票给你的答案(既不赞成也不反对)。我所做的唯一一件事就是提出修改建议(我明白了,这已经获得批准)。
        【解决方案9】:

        使用

        (array.count ? array : nil)
        

        如果 array = nil[array count] == 0 一样,它将返回 nil

        【讨论】:

          【解决方案10】:
          if (array == nil && [array count] == 0) {
          ...
          }
          

          我使用此代码是因为当我的pickerview 数组为空时遇到问题

          我的代码是

          - (IBAction)btnSelect:(UIBarButtonItem *)sender { // 52
          if (self.array != nil && [self.array count] != 0) {
              NSString *select = [self.array objectAtIndex:[self.pickerView selectedRowInComponent:0]];
          
              if ([self.pickListNumber isEqualToString:@"1"]) {
                  self.textFieldCategory.text = select;
                  self.textFieldSubCategory.text = @"";
              } else if ([self.pickListNumber isEqualToString:@"2"]) {
                  self.textFieldSubCategory.text = select;
              }
          
              [self matchSubCategory:select];
          } else {
              UIAlertView *myAlertView = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                    message:@"You should pick Category first"
                                                                   delegate:nil
                                                          cancelButtonTitle:@"OK"
                                                          otherButtonTitles: nil];
              [myAlertView show];
          }
          
          [self hidePickerViewContainer:self.viewCategory];
          }
          

          【讨论】:

          • 第一行的代码和示例代码里面的代码不一样。
          • 第一个块有一个固有的错误。如果 (array == nil) 它怎么会有'计数'??? this if 没有意义,并且总是返回 false。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-30
          • 2012-11-24
          • 2013-06-19
          • 1970-01-01
          • 2011-11-04
          • 2012-03-08
          相关资源
          最近更新 更多