如何在 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 是不是为空或为空?的主要内容,如果未能解决你的问题,请参考以下文章