我收到此错误:
-[__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;
}
我是Objective C的新手,我不知道为什么会这样。有人可以帮助我吗?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
这可能是这一行:
NSUInteger index = [[Data singleton].annotations objectAtIndex:indexPath.row];
objectAtIndex
返回一个对象,但是您将结果分配给一个原语(NSUInteger
,这是一个未签名的int的奇特名称)。我很惊讶XCode没有在这条线上给你警告。你在annotations
中存储了什么?
错误本身是一个超出界限的错误 - 虽然我认为这意味着它可以成为索引路径本身,正如Jeremy在评论中建议的那样,你正试图访问位置556503008阵列向我暗示它不是。
答案 2 :(得分:0)
所以我意识到我的意思是获取对象的索引,但是我将对象分配给NSUInteger,当它是自定义类的实例时。所以我只是改变了这行代码:
NSUInteger index = indexPath.row;