我有使用tableviews的一些经验。这次,我尝试从数组中加载它(从技术上讲,从字典中加载,但是allKeys参数是NSArray),但是,我只是得到了这个异常
-[__NSArrayI objectAtIndex:]: index 10 beyond bounds [0 .. 9]
现在,我的数组长度为11个键,这意味着它将被计为10(因为Obj-C也计数为0)。在这里它说它的数量是9.我尝试了几种不同的方法:
- (void)awakeFromNib
NSArray
11
但他们都给我例外!
我注意到有些人说我的数组只有10个对象,但是如果我将它设置为10
,我会丢失一个对象:
断点告诉11 ......
使用10个项目时没有“加速X”项目,请参阅?
NSLog
与10不同,与返回行数的方法相同
答案 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]];
}