2013-02-25 73 views
0

我收到此错误:指数超越界限的错误

-[__NSArrayM objectAtIndex:]: index 556503008 beyond bounds [0 .. 2]' 

这里就是应用程序崩溃:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSUInteger index = [[Data singleton].annotations objectAtIndex:indexPath.row]; 
    self.pinVC = [[PinViewController alloc]init]; 
    [self.pinVC setIdentifier:index]; 
    [[self navigationController]pushViewController:self.pinVC 
             animated:YES]; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return self.pinArray.count; 
} 

我新的目标C,我不知道为什么会这样正在发生。有人可以帮我吗?

+1

只需几件事就可以开始排除故障:显示您的'tableView:numberOfRowsInSection:'的实现。行数可能与您在注释数组中的任何内容不匹配。另外,你在'objectAtIndex:'中返回的值很可能是'NSNumber'的对象,而不是'NSUInteger',在这种情况下,你可以在'NSNumber'对象上调用'integerValue'来返回一个整数值。最后,'setIdentifier:'方法中发生了什么? – Jeremy 2013-02-25 23:34:40

+0

PinViewController具有一个NSUInteger的标识属性。 'objectAtIndex:'方法返回一个'NSUInteger' – 2013-02-25 23:38:17

回答

2

很可能您的pinArray变量与您在单例数组上的objectAtIndex:调用不匹配。假设[[Data singleton].annotations持有作为您pinArray变量相同类型的信息,那么你可以尝试:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSNumber *num = [self.pinArray objectAtIndex:indexPath.row]; 
    NSInteger index = [num integerValue]; //<-As an aside, observe I converted the number to integer type 
    ... 
    ... 
} 

的想法是,你可能会返回一个更高的行数比你的数组中有注释对象,因此超越边界错误。

否则你应该这样做:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSNumber *num = [[Data singleton].annotations objectAtIndex:indexPath.row]; 
    NSInteger index = [num integerValue]; //<-As an aside, observe I converted the number to integer type 
    ... 
    ... 
} 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [Data singleton].annotations.count; 
} 
0

这也可能是这一行:

NSUInteger index = [[Data singleton].annotations objectAtIndex:indexPath.row]; 

objectAtIndex返回一个对象,但你分配结果的原语(NSUInteger,这是一个奇特的名字为一个unsigned int)。我很惊讶XCode不会在此行发出警告。你在annotations存储什么?

错误本身是一个出界错误的 - 尽管我想这意味着它可能指数路径本身,杰里米建议中的意见,其实你要访问数组的556503008位置提示对我来说它不是。

0

所以我意识到,我的意思来获取对象的索引,但我将对象分配到NSUInteger,当它的一个实例自定义类。所以我只是将这行代码更改为:

NSUInteger index = indexPath.row;