如何解决滚动具有自定义单元格的 UITableview 的崩溃?

Posted

技术标签:

【中文标题】如何解决滚动具有自定义单元格的 UITableview 的崩溃?【英文标题】:How to solve crashes on scrolling UITableview which has custom cell? 【发布时间】:2015-10-26 06:21:28 【问题描述】:

我的应用在滚动具有自定义单元格但在模拟器上运行良好的 UITableview 时崩溃。

下面是我的代码

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath // Values of each cell

    
        static NSString *cellidentifier = @"cellidentifier";
        TableCell *cell = (TableCell*) [tableView dequeueReusableCellWithIdentifier:cellidentifier];
        //NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
        //cell = [nib objectAtIndex:0];
        cell = (TableCell *) [[[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil] objectAtIndex:0];

        if (cell == nil) 
        
            cell = [[[TableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellidentifier] autorelease];                

        

        cell.lblname.text = [name objectAtIndex:indexPath.row];
        cell.lblphone.text = [phone objectAtIndex:indexPath.row];
        cell.lbladdress.text =[address objectAtIndex:indexPath.row];

        NSData * photodata=[photo objectAtIndex:indexPath.row];
        cell.imgphoto.image=[UIImage imageWithData:photodata];        

        return cell;

任何帮助将不胜感激。

【问题讨论】:

能否在控制台中包含崩溃消息? 错误“收到内存警告”,但在模拟器上运行良好,在 iphone 上崩溃 我认为因为你没有重复使用你的单元格,所以如果你有很多单元格,它会迅速增加内存使用量,并且在模拟器上它有大量内存,而在设备上却没有。看看我的回答。 【参考方案1】:

您的 tableView 根本不重用单元格。因为您在调用dequeueReusableCellWithIdentifier: 后重新分配了cell。你的代码应该是:

static NSString *cellidentifier = @"cellidentifier";
TableCell *cell = (TableCell*) [tableView dequeueReusableCellWithIdentifier:cellidentifier forIndexPath:indexPath];
//NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil];
//cell = [nib objectAtIndex:0];

if (!cell) 
    cell = (TableCell *) [[[NSBundle mainBundle] loadNibNamed:@"TableCell" owner:self options:nil] objectAtIndex:0];

【讨论】:

它说“实例方法 dequeueReusableCellWithIdentifier:forIndexPath:indexPath 未找到(返回类型默认为 id)” 您的部署目标是什么?哪个版本的ios?此方法在 iOS 6.0 中可用。我查了一下,这里没有错字。当您键入该行时,Xcode 是否会为您提供该方法的自动完成功能? 即使在 xcode 上运行它也会显示错误提示“UITableView dequeueReusableCellWithIdentifier:forIndexPath:]: unrecognized selector sent to instance 0xf3e3800 2015-10-26 13:00:10.233 Rotary[383:707] ***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UITableView dequeueReusableCellWithIdentifier:forIndexPath:]:无法识别的选择器发送到实例 0xf3e3800” ***第一掷调用堆栈:(0x35b6988f 0x3378d259 0x35b6ca9b 0x35b6b915 0x35ac6650 0xdac93 0x332c9efb 0x332c8fd9 0x332c8763 0x3326cf37 0x35ac81fb 0x32c93aa5 0x32c936bd 0x32c97843 0x32c9757f 0x32c8f4b9 0x35b3db1b 0x35b3bd57 0x35b3c0b1 0x35abf4a5 0x35abf36d 0x3385a439 0x33297cd5 0xd659b 0xd6530)终止称为从调试器抛出exceptionMessage : 第k个包发送失败"

以上是关于如何解决滚动具有自定义单元格的 UITableview 的崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

集合视图,具有自定义布局,单元格在滚动时行为不端

自定义表格单元格的uitextfield

如何在Iphone +上仅将表格视图自定义单元格的左上角和右上角半径转角

带有自定义表格视图单元格的表格视图在滚动时消失

如何区分具有相同自定义单元格的两个 UITableView

如何使用填充单元格的 UIImageView 初始化自定义 UICollectionViewCell?