iOS 开发第三方库 FDTemplateLayoutCell 的坑

2016-10-11 16:41:16 +08:00
 miketeam

我用 FDTemplateLayoutCell 配合 masonry 布局自动高度,今天遇到了一个坑:就是明明 registerClass 了却老是 bug ,提示信息是没有 registerClass 的 CellReuseIdentifier ,我的这 UITableViewController 是继承字我自己封装的 BaseTableViewController,去除这个继承就不会提示这个 bug 了。。

然后正题来了:请问各位 iOS 开发的大神平时是如何找向这样(提示信息莫名其妙的 bug )的 bug 呢?

2673 次点击
所在节点    问与答
17 条回复
kera0a
2016-10-11 17:01:46 +08:00
提示信息里显示 没有 registerClass ,那肯定是某个 UITableView 没有 register 呗。
这个错误提示也不是 FDTemplateLayoutCell 的坑,和它没任何关系。

首先你在 cellForRowAt 里断点,看看调用 dequeueReusableCell 的 TableView 和你 register class 时的 TableView 是不是一个。打印他们的内存地址比对
kera0a
2016-10-11 17:04:32 +08:00
另外你调用 FDTemplateLayoutCell 的计算高度的方法,一定得用你 register class 的那个 UITableView 的实例来调用。

因为他里面也有一个 dequeueReusableCell 方法调用,如果这两个 TableView 不是同一个,也不行。
miketeam
2016-10-11 17:07:37 +08:00
我表示都注册了 ID 的。。然后就是提示那个错误,不用继承类就没有问题
kera0a
2016-10-11 17:09:43 +08:00
@miketeam
在你注册的地方,打印 TableView 的内存地址,
在你报错的地方,打印 TableView 的内存地址。
比对一下看是不是一样
miketeam
2016-10-11 17:25:35 +08:00
直接使用 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 里面那个工具可以诊断这个问题呢?
miketeam
2016-10-11 17:28:38 +08:00
对于这个事情其实我是更想知道:大家如果遇到这提示信息不太相关的 bug 如何调试呢?
LINAICAI
2016-10-11 17:48:14 +08:00
人家第三方库真莫名躺枪,自己不好好找错,没证据别黑吧。。。
miketeam
2016-10-11 18:02:09 +08:00
没有黑库。。。你都没看完,我其实想看看大家如何找 bug 的
loveuqian
2016-10-11 19:40:49 +08:00
一般的 bug 都是靠提示解决

乱七八糟的 bug 一般都是靠蒙
loveuqian
2016-10-11 19:41:32 +08:00
这框架我也有在用
暂时没问题
free9fw
2016-10-11 20:25:23 +08:00
这个 bug 貌似在 iOS7.0 上面会发生,但应该跟阳神的库无关
miketeam
2016-10-11 20:44:10 +08:00
我不确定啊,所以我正在看这个 oc 继承的东西以及阳神的源码。让我很奇怪这个事,。。
fengyunSmlie
2016-10-11 21:32:16 +08:00
上代码看看吧 这样扯找不到的
fengyunSmlie
2016-10-11 21:35:20 +08:00
@miketeam 阳神的是可以用的啊
miketeam
2016-10-12 09:06:44 +08:00
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 了
zhangchioulin
2016-10-12 14:59:30 +08:00
看到了在用 OC 的兄弟好感动....我以为大家都转 S Swift 了
miketeam
2016-10-12 16:55:37 +08:00
...私下我也用 swift ,公司里的东西早做完早回家,干嘛用 swift 啊,改个版改一片。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/311937

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX