带有NSArray的UITableView给出了“索引超出边界”错误

时间:2013-10-07 17:46:00

标签: uitableview nsarray

我有使用tableviews的一些经验。这次,我尝试从数组中加载它(从技术上讲,从字典中加载,但是allKeys参数是NSArray),但是,我只是得到了这个异常

-[__NSArrayI objectAtIndex:]: index 10 beyond bounds [0 .. 9]

现在,我的数组长度为11个键,这意味着它将被计为10(因为Obj-C也计数为0)。在这里它说它的数量是9.我尝试了几种不同的方法:

  • 将字典的初始化移至- (void)awakeFromNib
  • 使用所有键创建单独的NSArray
  • 只需列出11

但他们都给我例外!

更新

我注意到有些人说我的数组只有10个对象,但是如果我将它设置为10,我会丢失一个对象:

As you can see, there are 11 keys

断点告诉11 ......

enter image description here

使用10个项目时没有“加速X”项目,请参阅?

enter image description here

NSLog与10不同,与返回行数的方法相同

1 个答案:

答案 0 :(得分:1)

事实是你的阵列长达10个项目。上面的评论并没有说"你应该删除"加速X"为了让它长达10个项目,他们会说"你错误地认为你的阵列长达11个项目"。

如果没有看到更多代码,很难说出这里真正发生了什么;但无论如何,你不应该使用-allValues,因为该数组中的排序是未定义的,这使得它不适合用于支持表视图。

相反,您应该按照希望它们显示的顺序保留字典键的数组,然后直接引用_items[key]

例如:

_keys = 
@[
    @"Red",
    @"Orange",
    @"Yellow",
    @"Green",
    @"Blue",
    @"Indigo",
    @"Violet"
];

_dictionary = 
@{
    @"Blue": @"Battle",
    @"Green": @"Gave",
    @"Indigo": @"In",
    @"Orange": @"Of",
    @"Red": @"Richard",
    @"Violet": @"Vain"
    @"Yellow": @"York",
};

- (NSString *)labelTextForIndexPath:(NSIndexPath *)indexPath
{
    return _keys[indexPath.row];
}

- (NSString *)detailLabelTextForIndexPath:(NSIndexPath *)indexPath
{
    return _dictionary[_keys[indexPath.row]];
}
相关问题