【发布时间】:2015-05-12 22:13:07
【问题描述】:
如果你有一个名为 anArray 的 NSArray 对象和一个名为 anIndexSet 的 NSIndexSet 对象,你可以向前迭代一个索引集,如下所示。
摘录,Apple Documents:
NSArray *anArray = [NSArray array];
NSIndexSet *anIndexSet = [NSIndexSet indexSetWithIndex:3];
NSUInteger index = [anIndexSet firstIndex];
while(index != NSNotFound) {
NSLog(@" %@",[anArray objectAtIndex:index]);
index = [anIndexSet indexGreaterThanIndex:index];
}
为什么要在上述场景中终止 NSRangeException?
【问题讨论】:
-
因为你的数组是空的。索引 3 处没有对象。
-
按如下方式启动 anArray 时出现同样的错误! NSArray *anArray = [NSArray arrayWithObject:anIndexSet];
-
当然因为这只会将一个对象添加到数组中。所以索引 3 处仍然没有任何内容。要访问索引 3,您至少需要数组中的四个对象。
-
其实我认为是while()条件的问题。 arrayWithObject:如果索引超出数组的末尾,则会引发 NSRangeException。同样创建与集合相同数量的数组也会产生相同的错误!
-
您似乎对数组感到困惑。您需要实际将对象添加到数组中。然后,您的索引集应该引用对数组中的对象数量实际有效的索引。仅将索引设置为数组中唯一的对象来创建数组根本不是您想要做的。
标签: ios objective-c cocoa