如何在 iOS 中检查 NSArray 是不是为空或为空?

Posted

技术标签:

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

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

谢谢。

【问题讨论】:

【参考方案1】:
if (array == nil || [array count] == 0) 
    ...

【讨论】:

在处理对象时应该使用nil(参见***.com/questions/557582/null-vs-nil-in-objective-c)。 你应该两者都做吗?或者如果数组为 nil,[array count] == 0 会返回 TRUE 吗? 不,你不需要两者。通过 nil 对象发送消息在 Objective-C 中被忽略,将产生 0。所以if ([array count] == 0) ... 就够了。 @***foe 向 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。

以上是关于如何在 iOS 中检查 NSArray 是不是为空或为空?的主要内容,如果未能解决你的问题,请参考以下文章

iOS:有没有办法检查 NSArray 对象是不是包含某个字符?

检查文档目录 URL 是不是为空

检查 iOS 8 的自定义键盘中的输入文本是不是为空

核心数据可转换属性(NSArray)为空

如何检查参数是不是为空并在查询中检查它

如何在 Bash 中检查文件是不是为空?