带NSArray的UITableView给出了;索引越界“;错误

带NSArray的UITableView给出了;索引越界“;错误,uitableview,nsarray,Uitableview,Nsarray,我有一些使用TableView的经验。这一次,我尝试从数组中加载它(从技术上讲,是从字典中加载的,但是allKeys参数是一个NSArray),但是,我得到了这个异常 -[__NSArrayI objectAtIndex:]: index 10 beyond bounds [0 .. 9] 现在,我的数组有11个键长,这意味着它将被计数为10(因为Obj-C也计数为0)。这里写着计数是9。我尝试了几种不同的方法: 将字典的初始化移动到-(void)awakeFromNib 使用所有键创建一个

我有一些使用TableView的经验。这一次,我尝试从数组中加载它(从技术上讲,是从字典中加载的,但是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不同。事实上,数组的长度是10个项目。上面的评论并不是说“你应该删除“加速X”使它有10个项目长”,而是说“你错误地认为你的数组有11个项目长”

如果看不到更多的代码,就很难说出这里到底发生了什么;但无论如何,您不应该使用
-allValues
,因为该数组中的顺序未定义,因此不适合用于支持表视图

相反,您应该按照希望显示的顺序保留字典的键数组,然后直接引用
\u 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]];
}

NSArray
知道如何计数,为什么不发布数组填充代码>现在,我的数组有11个键长您的问题似乎是它只有10个键长。我可以向您保证,该数组中只有10个元素。请在出现问题的语句之前记录数组,以查看其内容。请确保其中一个键不是重复的。可能您的第11个元素是null而不是@“0”,在这种情况下,数组将被视为有10个元素,因为数组以null结尾。感谢您的回答,我稍后将尝试创建一个C数组+dict。效果很好,谢谢