0

我正在使用以下代码检查对象是否存在,然后再将其删除:

if(titlescopy.count >= i)
{
   if([[titlescopy objectAtIndex:i] isKindOfClass:[NSString class]])
   {
       [titlescopy removeObjectAtIndex:i];
   }
}

但是,我收到此错误:

*由于未捕获的异常'nsrangeexception'而终止应用程序,原因:'* - [__ nsarraym objectatIndex:]:索引2超出界限[0 .1]' *首次投掷呼叫堆栈:( 0x365A56C3 0x3885155 0x364f1055 0x494b 0x37f 0x37fe7a81 0x38001ddd 0x172bd 0x3805f8e5 0x3805f897 0x3805f875 0x3805f12b 0x3805f621 0x37f87d29 0x37f74f29 0x37f74843 0x34ea25d3 0x34ea2203 0x3657a593 0x3657a537 0x365793b9 0x364ec39d 0x364ec229 0x34ea131b 0x37fc88f9 0x283b 0x2798)的libc ++ abi.dylib:终止称为抛出异常(LLDB)

为什么会这样?我正在使用的代码应该在尝试删除它之前检查对象是否存在,它显然不存在。

谢谢!

4

3 回答 3

5

Objective-C 中的数组索引从 0 开始,因此 i =titlescopy.count 超出范围。将您的 if 语句更改为:

if(titlescopy.count > i)
于 2012-09-08T14:23:48.207 回答
4

答案在您的日志中......

* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[_**_NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]'**

您指的是超出范围的索引...例如,考虑您的数组大小为 3,但您指的是第 4 个对象。所以最好检查下面的索引是否计数。如果是这样,请继续您想要的。

// mistake is "i" should not be equal to count...
if(i < titlescopy. count)
{
     if([[titlescopy objectAtIndex:i] isKindOfClass:[NSString class]])
     {
         [titlescopy removeObjectAtIndex:i];
     }
}
于 2012-09-08T14:26:09.510 回答
0

//if(titlescopy.count >= i) ">=" 是错误的。把它变成“>”

"i" 应该小于数组的计数 a=

if(titlescopy.count > i)
{
    if([[titlescopy objectAtIndex:i] isKindOfClass:[NSString class]])
    {
        [titlescopy removeObjectAtIndex:i];
    }
}
于 2012-09-08T17:49:34.897 回答