如何解决滚动具有自定义单元格的 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 的崩溃?的主要内容,如果未能解决你的问题,请参考以下文章