【问题标题】:NSarray count throwing out of boundsNSarray 计数超出范围
【发布时间】:2012-06-13 21:09:47
【问题描述】:

我正在尝试检查以下内容,但都抛出了越界错误

if ([objects count] < 1)
if ([objects count] == 0)
if ([objects count] <= 0)

三个人都出界了?如何在“if/else”语句中使用它?是否无法检查 NSArray 是否包含零个对象。

【问题讨论】:

标签: objective-c nsarray


【解决方案1】:

如果你只是定义了指针但没有初始化你的objects 实例,你会得到非常奇怪的行为。作为一个初级可可开发者,我至少被类似的东西烧了两次

NSMutableArray *objects;
...
if ( [objects count] == 0 )
{
    .... // do something 
}

你确定你初始化了它吗,例如像这样:

NSMutableArray *objects = [NSMutableArray array];

因为它真的应该在这种情况下工作!

【讨论】:

  • 忽略了它。该死的小东西!
【解决方案2】:

我不认为这些代码行会导致这样的错误。

此代码适用于任何数组。 越界异常意味着您尝试调用类似

[myArray objectAtIndex:0];

在一个空数组上。或者,换句话说,您试图访问一个不属于数组的对象。

【讨论】:

  • 请避免在堆栈溢出时使用缩写。他们不喜欢他们,因为他们给你的帖子一种不专业的感觉。我冒昧地将它们从您的帖子中删除。
【解决方案3】:

您不应该出现越界异常,因为您甚至没有尝试访问数组中的元素——只有在您对数组调用 objectAtIndex 并指定非法索引时才应该抛出越界异常.

一般来说,为了防止尝试访问 nil 或空数组,我通常会这样做:

if(!objects || !objects.count) ...

这样,如果objects 不存在,那么objects.count 将不会被调用。

【讨论】:

    【解决方案4】:

    你也可以试试这个。

    if(![objects lastObject])
    {
        //... Do Something
    }
    

    【讨论】:

      猜你喜欢
      • 2014-03-15
      • 1970-01-01
      • 2011-07-10
      • 2011-11-23
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      相关资源
      最近更新 更多