2

从一个数组中,我想创建一个新的可变数组,其中包含满足特定条件的所有项目。那不是问题。问题是检查数组是否为空。

   if (!theDates]) {/*do something*/}

无论如何它都会返回正值,因为创建了可变数组。但

    if (![theDates objectAtIndex:0]) 
    {
        /* nothing got added to the array, so account for that */
    } 
    else 
    {
        /* do something with the array */
    }

它崩溃了。

4

6 回答 6

5

这会崩溃,因为尽管您已经分配了数组,但它仍然是空的。该行[theDates objectAtIndex:0]正在尝试访问数组的第一个对象,由于您的数组还没有,它会崩溃。

要检查阵列的完整性,只需执行以下操作:

if (theDates.count > 0)
{
    //Do something

    id object = theDates[0]; //this for sure won't crash
}
于 2013-08-06T02:47:33.563 回答
1

使用[theDates count] > 0. 您正在访问一个可能不存在的元素,因此当它为空时它会崩溃。

于 2013-08-06T02:53:07.373 回答
0

if (theDates != nil){ if (theDates.count > 0){ 'do something' } }

这应该检查空数组,然后检查空数组以防止出现空指针异常

于 2013-08-06T02:59:44.727 回答
0

或者您可以使用 lastObject 方法,如果数组为空,该方法将返回 nil

if (![theDates lastObject]) { do something }
于 2013-08-06T04:48:25.647 回答
0
if( (theDates!=nil) && (theDates.count > 0))
{
  //We have and existing array and something in there..
}
于 2013-08-06T05:00:02.170 回答
0

这将工作正常..

if (!URarray || !URarray.count){
  // write code here
}
于 2015-03-31T07:32:30.553 回答