关于tableview的一些bug

本文探讨了UITableView中由于内存压力可能导致的应用崩溃问题,重点在于理解cell的重用原理。同时,提到了一个常见错误:在代码中设置表格的cell时,必须确保cell的identifier与XIB文件中的标识符匹配,否则可能会引发运行时错误。
摘要由CSDN通过智能技术生成

about tableview bug


内存压力而奔溃

原因:cell没有被复用

一般来说,对于cell的复用是这样子的:

关于cell的复用:这里根据屏幕的高度,先创建第一个cell,第二个cell。当tabbleview向上滑动的时候,第一个cell渐渐移除屏幕,创建第三个cell,从屏幕下方进入显示。当第一个cell全部移除屏幕的时候会进入复用池,第四个cell就会复用第一个cell。这里tablveiw会创建3个cell,然后其他的就会复用。

(1)cell xib上的设置

(2)代码里面设置表的cell,给cell添加identifier,cell xib和这个identifier要一致

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

    static NSString *identifier = @"starShowCell";
    StarShowTableViewCell *cell = [starTableView dequeueReusableCellWithIdentifier:identifier];
    if (cell==nil) {
       
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"StarShowTableViewCell" owner:nil options:nil];
        for (id oneObject in nib) {
            if ([oneObject isKindOfClass:[StarShowTableViewCell class]]) {
                cell = (StarShowTableViewCell*)oneObject;
            }
        }
  
    }
 }

可我的问题是:

可是,我的代码里面这样子写,cell并没有复用,而是每次都创建了新的cell,每次都会进入if(cell==nil)里面去创建新的cell。
原因: StarShowTableViewCell *cell = [ starTableView dequeueReusableCellWithIdentifier :identifier];
我用xib关联了一个 starTableView ,然后写了一个实例变量 uitableview * starTableView ;这里拿到的tableview和我显示tableview不是一样的。本来当前页面只有一个tableview,但是代码里面有两个了。




erminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray insertObject:range:: Out of bounds'
*** First throw call stack:

数组越界。cell复用,没有重置数据。没有刷新reloaddata

使用tableview的时候老是出现cell的数据重复,是因为我们复用cell却没有重置数据。就像tableview你给了他数据,还要reloaddata才行。

- ( void )awakeFromNib
{

}
-( void )setStarModel:( StarShowModel *)starModel{

    _starModel = starModel;

 }
  
-( void )layoutSubviews{

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值