文档章节

cell重用时,老是提示找不到标识的cell,让我们注册cell

闲云悠鹤蝶恋舞
 闲云悠鹤蝶恋舞
发布于 2016/01/05 00:37
字数 494
阅读 342
收藏 1

报错提示:

[9098:232849] *** Assertion failure in -[UITableView dequeueReusableCellWithIdentifier:forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/UITableView.m:6564

2016-01-05 00:00:37.574 UI进阶考试微信[9098:232849] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'unable to dequeue a cell with identifier mineCell - must register a nib or a class for the identifier or connect a prototype cell in a storyboard'



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    // 创建可重用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] init];
    }
    
    return cell;
}


注意:上面的代码出错原因:

             1.没有给storyboard中的cell添加标识。

             2.如果是纯代码创建的UIStoryboard,在重用cell的时候,应该使用方法

- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;



解决方法一:

   在storyboard中给cell添加标识,如果使用这种方法的话,就可以不用判断cell是否能从缓存池中找到,因为当从缓存池中找不到的话,就会使用storyboard中的cell。


解决方法二:

   cell重用的时候,使用方法

- (nullable __kindof UITableViewCell *)dequeueReusableCellWithIdentifier:(NSString *)identifier;

再加上if判断

  if (cell == nil) {
        cell = [[UITableViewCell alloc] init];
    }

当从缓存池中找不到cell的时候,就会if判断语句的代码中重新创建。


总结:

   1、如果我们是用纯代码创建的UITableViewController的话,这时要创建可重用的cell的时候,一定要判断是否能从缓存池中找到,否则就会报错的!

   2、如果是在stroryboard中直接以拖拽的方式,创建的UITableViewController的话,最好给storyboard中的cell添加一个标识,以防出错。标识后我们就没必要再去判断cell是否能从缓存池中找到,因为即使找不到,系统也会自动的加载storyboard中的cell的。

© 著作权归作者所有

闲云悠鹤蝶恋舞
粉丝 1
博文 40
码字总数 1731
作品 0
朝阳
程序员
私信 提问
UItableView的cell优化

tableViewCell的常见设置 TableViewCell的循环使用 循环使用的原理 首先,我们在手机界面的看到的的展示时,假设我们看到展示在界面上,那么实际中系统给我们创建了个cell,即为我们看到个cell ...

追逐iOS
04/12
0
0
iOS开发之自定义UITableViewCell

等高的Cell 一、storyboard方式 创建一个继承自UITableViewCell的子类 在storyboard中 - 往cell里面增加需要用到的子控件 - 设置cell的重用标识 - 设置cell的class为我刚才创建的那个Cell类型...

shenhuniurou
2016/03/17
218
0
自定义UITableViewCell

自定义UITableViewCell大致有两类方法: <一>使用nib 1、xib中指定cell的Class为自定义cell类型(注意不是设置File's Owner的class) 2、调用 tableView 的 registerNib:forCellReuseIdenti......

马尔代夫的沙滩
2016/04/09
49
0
UITableView 重用池原理

重用实现分析   查看UITableView头文件,会找到NSMutableArray* visiableCells,和NSMutableDictnery* reusableTableCells两个结构。visiableCells内保存当前显示的cells,reusableTableCe...

别情花如依丶
2016/07/14
46
0
UITableView学习笔记

http://www.cnblogs.com/smileEvday/archive/2012/06/28/tableView.html   看TableView的资料其实已经蛮久了,一直想写点儿东西,却总是因为各种原因拖延,今天晚上有时间静下心来记录一些...

goodlook
2016/02/22
27
0

没有更多内容

加载失败,请刷新页面

加载更多

全面兼容IE6/IE7/IE8/FF的CSS HACK写法

浏览器市场的混乱,给设计师造成很大的麻烦,设计的页面兼容完这个浏览器还得兼容那个浏览器,本来ie6跟ff之间的兼容是很容易解决的。加上个ie7会麻烦点,ie8的出现就更头疼了,原来hack ie...

前端老手
1分钟前
0
0
常用快递电子面单批量打印api接口对接demo-JAVA示例

目前有三种方式对接电子面单: 1.快递公司:各家快递公司逐一对接接口 2.菜鸟:支持常用15家快递电子面单打印 3.快递鸟:仅对接一次,支持常用30多家主流快递电子面单打印 目前也是支持批量打...

程序的小猿
4分钟前
0
0
Yii 框架中rule规则必须搭配验证函数才能使用

public $store_id;public $user_id;public $page;public $limit;public $list;public $mch_list;public $cart_id;public $is_community;public $shop_id;public $cart_typ......

chenhongjiang
7分钟前
0
0
Flutter使用Rammus实现阿里云推送

前言: 最近新的Flutter项目有“阿里云推送通知”的需求,就是Flutter的App启动后检测到有新的通知,点击通知栏然后跳转到指定的页面。在这里我使用的是第三方插件Rammus来实现通知的推送,之...

EmilyWu
7分钟前
1
0
Knative 实战:三步走!基于 Knative Serverless 技术实现一个短网址服务

短网址顾名思义就是使用比较短的网址代替很长的网址。维基百科上面的解释是这样的: 短网址又称网址缩短、缩短网址、URL 缩短等,指的是一种互联网上的技术与服务,此服务可以提供一个非常短...

阿里巴巴云原生
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部