我用 FDTemplateLayoutCell 配合 masonry 布局自动高度,今天遇到了一个坑:就是明明 registerClass 了却老是 bug ,提示信息是没有 registerClass 的 CellReuseIdentifier ,我的这 UITableViewController 是继承字我自己封装的 BaseTableViewController,去除这个继承就不会提示这个 bug 了。。
然后正题来了:请问各位 iOS 开发的大神平时是如何找向这样(提示信息莫名其妙的 bug )的 bug 呢?
1
kera0a 2016-10-11 17:01:46 +08:00
提示信息里显示 没有 registerClass ,那肯定是某个 UITableView 没有 register 呗。
这个错误提示也不是 FDTemplateLayoutCell 的坑,和它没任何关系。 首先你在 cellForRowAt 里断点,看看调用 dequeueReusableCell 的 TableView 和你 register class 时的 TableView 是不是一个。打印他们的内存地址比对 |
2
kera0a 2016-10-11 17:04:32 +08:00
另外你调用 FDTemplateLayoutCell 的计算高度的方法,一定得用你 register class 的那个 UITableView 的实例来调用。
因为他里面也有一个 dequeueReusableCell 方法调用,如果这两个 TableView 不是同一个,也不行。 |
3
miketeam OP 我表示都注册了 ID 的。。然后就是提示那个错误,不用继承类就没有问题
|
4
kera0a 2016-10-11 17:09:43 +08:00
|
5
miketeam OP 直接使用 UITableViewController 的话没有问题,内存地址一样: 0x10116ae00 ;让这个类继承于我的 BaseTableViewController 就直接挂球了, First throw call stack:
(0x183d781c0 0x1827b055c 0x183d78094 0x18480282c 0x1000bbcf8 0x1000bbef8 0x1000bc9dc 0x10013f1f0 0x189f0a250 0x189ce0800 0x189ca01a4 0x189c9f5f4 0x189c9f380 0x189c9f1b4 0x189efd6f0 0x189efce20 0x1000ee558 0x10013d608 0x189bc13dc 0x189bd8f70 0x189d614bc 0x189c79b84 0x189c797ec 0x189c79750 0x189bbe54c 0x18708640c 0x18707b0e8 0x18707afa8 0x186ff7c64 0x18701f0d0 0x189bb3c1c 0x183d257dc 0x183d2340c 0x183d2389c 0x183c52048 0x1856d5198 0x189c2c628 0x189c27360 0x100155d68 0x182c345b8)。 我为什么感觉就是这个继承出了问题呢?我先断点调试,但是都是在 FDTemplateLayoutCell 里面来回跳。然后我做了一个对比 demo ,不用继承,就没有问题了。 instrument 里面那个工具可以诊断这个问题呢? |
6
miketeam OP 对于这个事情其实我是更想知道:大家如果遇到这提示信息不太相关的 bug 如何调试呢?
|
7
LINAICAI 2016-10-11 17:48:14 +08:00
人家第三方库真莫名躺枪,自己不好好找错,没证据别黑吧。。。
|
8
miketeam OP 没有黑库。。。你都没看完,我其实想看看大家如何找 bug 的
|
9
loveuqian 2016-10-11 19:40:49 +08:00 via iPhone
一般的 bug 都是靠提示解决
乱七八糟的 bug 一般都是靠蒙 |
10
loveuqian 2016-10-11 19:41:32 +08:00 via iPhone
这框架我也有在用
暂时没问题 |
11
free9fw 2016-10-11 20:25:23 +08:00
这个 bug 貌似在 iOS7.0 上面会发生,但应该跟阳神的库无关
|
12
miketeam OP 我不确定啊,所以我正在看这个 oc 继承的东西以及阳神的源码。让我很奇怪这个事,。。
|
13
fengyunSmlie 2016-10-11 21:32:16 +08:00
上代码看看吧 这样扯找不到的
|
14
fengyunSmlie 2016-10-11 21:35:20 +08:00
@miketeam 阳神的是可以用的啊
|
15
miketeam OP base 里面内容:
----------------------------------------------- - (void)viewDidLoad { [super viewDidLoad]; //注册 cell , 本表所有的 cell 都是代码定义 if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { self.automaticallyAdjustsScrollViewInsets = NO; } self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine; // 取消滚动条 self.tableView.showsVerticalScrollIndicator = NO; self.tableView.showsHorizontalScrollIndicator = NO; self.tableView.multipleTouchEnabled = NO; [self.tableView setSeparatorInset:UIEdgeInsetsZero]; [self.tableView setLayoutMargins:UIEdgeInsetsZero]; } -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { [cell setSeparatorInset:UIEdgeInsetsZero]; [cell setLayoutMargins:UIEdgeInsetsZero]; } --------------------------------------------- 在 viewDidLoad 里面注册 ' [self.tableView registerClass:[CustomerBootTableViewCell class] forCellReuseIdentifier:checkCellBottomID]; ' ---------------------------------------------- 计算高度 -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row == 11) { NSDictionary *dics = self.requestInfoDictiongary; return [self.tableView fd_heightForCellWithIdentifier:checkCellBottomID cacheByIndexPath:indexPath configuration:^(CustomerBootTableViewCell *cell) { cell.footLabel.text = [dics stringForKey:@"RequestRemark"]; }]; } else{ return 48; } } --------------------------------------------- 在该类的头里面 @interface CheckDetailViewController : UITableViewController//没有问题 @interface CheckDetailViewController : BaseTableViewController//bug 了 |
16
zhangchioulin 2016-10-12 14:59:30 +08:00
看到了在用 OC 的兄弟好感动....我以为大家都转 S Swift 了
|
17
miketeam OP ...私下我也用 swift ,公司里的东西早做完早回家,干嘛用 swift 啊,改个版改一片。。。
|