您的位置:首页 > 移动开发 > Objective-C

UITableView 滚动时使用reloaddata出现 crash'-[__NSCFArray objectAtIndex:]: index (1) beyond bounds (0)' Crash

2013-10-25 16:33 162 查看
例子:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath



static NSString *CellIndentifier = @"Account";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIndentifier];

//adjust the height for cell
CGRect cellFrame = [cell frame];
cellFrame.size.height = self.bgImageView.frame.size.height/2;

//first time load the content
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIndentifier] autorelease];

。。。。。。。。。



else



//这里主要是为了在滚动屏幕时候解决屏幕内容显示错误。但是却引发了这个问题,操作为向一个方向快速反复滚动就很容易crash,应该是reload后因为使用了dequeueReusableCellWithIdentifier导致table

无法得到正确的应当显示的cell内容和个数,导致出错。

[viewtable reloadData];







解决方法:

static NSString *CellIndentifier = @"Account";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIndentifier];

//adjust the height for cell
CGRect cellFrame = [cell frame];
cellFrame.size.height = self.bgImageView.frame.size.height/2;

//first time load the content
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIndentifier] autorelease];

//创建所有的子视图

}else

{

//移除所有的子视图

while ([cell.contentView.subviews lastObject] != nil)
{
[(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];
}
//重新添加子视图

}

这样做的效果上看不会因为删除子视图然后出现空白等待加载的不良效果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: