首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSRangeException in UITableView

NSRangeException in UITableView
EN

Stack Overflow用户
提问于 2013-10-29 08:20:58
回答 3查看 1.1K关注 0票数 0

这是我在tableView:cellForRowAtIndexPath:方法中的代码,

代码语言:javascript
复制
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}

// Configure the cell...
NSDictionary *temp = [self.placeArray objectAtIndex:[indexPath row]];
cell.textLabel.text = [temp objectForKey:@"name"];
cell.detailTextLabel.text = [[temp objectForKey:@"distance"] stringByAppendingString:@" km from Banglore"];
cell.imageView.image =[UIImage imageNamed:[temp objectForKey:@"category"]];
return cell;

我有例外,

代码语言:javascript
复制
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]'

有什么指示吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-29 08:23:25

看看你的Tableview代表是不是,

代码语言:javascript
复制
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return self.placeArray.count;
}

否则让我知道..。

票数 1
EN

Stack Overflow用户

发布于 2013-10-29 08:33:24

异常本身为您提供了答案。您的self.placeArray只包含3个元素,并且您正在尝试创建多个单元格。您需要确保self.placeArray的计数在numberOfRowsInSection方法中返回,而且该数组在表视图重新加载时不会异步更新。

票数 1
EN

Stack Overflow用户

发布于 2013-10-30 18:33:11

在numberOfRowsForSection中返回的值大于placeArray中的对象数。

在线后

代码语言:javascript
复制
NSDictionary *temp = [self.placeArray objectAtIndex:[indexPath row]];

加上这个

代码语言:javascript
复制
NSLog(@"number of places = %i", [placeArray count]);

在该行处添加一个断点。您将看到应用程序在第四次命中此断点时会崩溃,因为numberOfRowsInSection返回>3行,而且您的placeArray只有<=3对象

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19652990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档