从removeObjectsInRange:收到NSRangeException,但传递的范围在边界内

9

我遇到了下面的错误,但是这个错误看起来没有任何意义。

* Terminating app due to uncaught exception 'NSRangeException', reason: '* -[NSMutableArray removeObjectsInRange:]: range {11, 15} extends beyond bounds [0 .. 15]'

我在做什么错了吗?我的操作应该在数组范围内。删除数组中的最后一个对象会导致问题吗?

1个回答

46

NSRange的第二个字段表示长度而不是终点。 您正在尝试从索引11开始删除15个对象。

相反,您应该进行以下操作:

[myArray removeObjectsInRange:(NSRange){11, 5}];

1
@Yar:你知道,这是完全相同的文档。 :) - jscs
我知道,但我永远无法理解文档何时会相同,以及iOS和Mac何时会生成不同的文档(有时会因为方法不同等原因)。虽然它们在这种情况下是相同的,但它们是否可能彼此不同呢? - Dan Rosenstark
@Yar:没错,有些奇怪的差异。这里“基础类”一节下面有一张有趣的图表:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html#//apple_ref/doc/uid/TP40002974-CH3-SW20 - jscs
具有讽刺意味的是,即使您将前缀更改为“ios”,该文档也不会更改;) 不过,谢谢,图1-7很有趣。实际上,我还以为在iOS上会错过更多东西... - Dan Rosenstark
1
您还可以使用 NSMakeRange(location, length) 函数来指定范围。 - bw1024

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接