首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutableOrderedSet NSRangeException

NSMutableOrderedSet NSRangeException
EN

Stack Overflow用户
提问于 2012-10-05 15:31:04
回答 2查看 456关注 0票数 0

我得到了一个NSRangeException错误,在这个非常基本的代码中找不到错误。有人能帮忙纠正我的盲点吗?

代码语言:javascript
复制
uint32_t offsetVal = 0;
int num = 100;
_offsetVals=[[NSMutableOrderedSet alloc]initWithCapacity:num+1];
for (int i=0; i<=num; i++) // note: there is 1 greater offset record than there is glyphs!
{
    CFDataGetBytes(tableData, CFRangeMake(offset,4),(UInt8*)&offsetVal);
    offsetVal=CFSwapInt32HostToBig(offsetVal);
    [_offsetVals insertObject:[NSNumber numberWithInt:offsetVal] atIndex:i];
    offset+=4;
}

然而,该应用程序崩溃的原因是:'NSRangeException',原因:'* -__NSOrderedSetM setObject:atIndex::index 3超出界限0。1‘

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-06 17:25:58

问题是,NSMutableOrderedSet将初始容量视为提示而不是指令,因此插入失败的原因是系统没有分配必要的空间。来自手册(但不在insertObject文本中):

"NSMutableOrderedSet对象不像C数组。也就是说,即使在创建可变有序集时可以指定一个大小,但指定的大小被视为“提示”;该集合的实际大小仍然是0。这意味着您不能在大于集合当前计数的索引处插入对象。例如,如果一个集合包含两个对象,其大小为2,那么可以在索引0、1或2处添加对象。索引3是非法的,超出界限;如果试图在索引3(数组大小为2时)添加对象,NSMutableOrderedSet将引发异常。“

票数 0
EN

Stack Overflow用户

发布于 2012-10-05 15:39:50

我相信您的问题在于,您已经将条件语句设置为i<=num,这将反过来在for循环结束时提供一个100的索引。所有类似数组的结构从0开始计数,所以用i < num替换该条件应该可以解决您的问题。

编辑:使用[_offsetVals addObject:[NSNumber numberWithInt:offsetVal]]而不是insertObject:atIndex:已经解决了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12749479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档