[求助]关于自定义 'UITableView', 'UITableViewCell' 复用的问题。

2016-11-01 13:01:25 +08:00
 lisonfan

懒加载的时候注册 Cell :

- (UITableView *)homeTableView{
    if (!_homeTableView) {
        _homeTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height) style:UITableViewStylePlain];
        self.homeTableView.delegate = self;
        self.homeTableView.dataSource = self;
        [self.homeTableView registerClass:[HomeTableViewCell class] forCellReuseIdentifier:_identifier];
        [self addSubview:self.homeTableView];
    }
    return _homeTableView;
}

然后创建 Cell 的时候报错 :

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    HomeTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:_identifier forIndexPath:indexPath];
    NSLog(@"%@",cell);
    NSDictionary * dic = _nowNewsDataArr[indexPath.row];
    [cell config:dic];
    return cell;
}

我实在没办法了,搜了好久没搜到

3188 次点击
所在节点    iDev
21 条回复
banxi1988
2016-11-01 13:16:57 +08:00
一眼看不出错误,最后搞一个 Demo 方便别人帮助你.
lisonfan
2016-11-01 13:18:03 +08:00
@banxi1988 好的,我传个 github
lisonfan
2016-11-01 13:30:50 +08:00
f19009
2016-11-01 14:06:18 +08:00
用 [tableView dequeueReusableCellWithIdentifier:@"identifier"] 这个方法
lisonfan
2016-11-01 14:15:04 +08:00
@f19009

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);
无限递归,这是为毛。。
acumen
2016-11-01 14:33:54 +08:00
弱问:懒加载里 self.homeTableView 不会无限递归吗?
CommandZi
2016-11-01 15:06:52 +08:00
你把懒加载里面的 self.homeTableView 都改成 _homeTableView
lisonfan
2016-11-01 15:10:16 +08:00
@CommandZi 懒加载里面的移出来了,还是不行,无限递归导致内存溢出奔溃
SeanChense
2016-11-01 15:27:53 +08:00
刚翻 Stack overflow 就看到楼主的问题
SeanChense
2016-11-01 15:32:25 +08:00
楼主在 heightForRowAtIndexPath 里调了 cellForRowAtIndexPath ,然鹅后者又要调前者
lisonfan
2016-11-01 15:33:19 +08:00
@SeanChense 英语渣的一逼就删了
lisonfan
2016-11-01 15:35:31 +08:00
@SeanChense 确实
难怪死循环,如果想动态返回行高怎么怎么做呢?
SeanChense
2016-11-01 15:37:15 +08:00
@lisonfan 这方面的教程很多,可以搜索下
SeanChense
2016-11-01 15:41:41 +08:00
楼主的代码比较清奇

有几个槽点
1.mj 那个 block 是被 copy 起来的, self 会被持有循环引用
2.把 cell 绑定的数据换成 Model 吧, dict 太初级了
3.像 `- (void)initWithHomeTableView;` 这样的 initWithXXX 方法,第一楼主返回的 void 这很诡异,第二 WithXXXX 一般 XXX 是参数签名

其他没看了
lisonfan
2016-11-01 15:44:20 +08:00
@SeanChense 好的,非常感谢你的提点,不然不知道要被困扰多久
cookiezby
2016-11-01 15:52:13 +08:00
提醒下楼主把 gitignore 设置好, Pod 文件夹下的东西一般是不用 commit 的。
lisonfan
2016-11-01 15:54:44 +08:00
@cookiezby 好的,谢谢提醒
lisonfan
2016-11-01 16:14:02 +08:00
@SeanChense
2. 我还特意把 model 转 arr 发出来的
3. 方法命名规则不熟悉,继续学习。
SeanChense
2016-11-01 17:05:39 +08:00
@lisonfan 没事,我也这样过来的。不断学习。
Pod 要不要加到 ignore 得看情况,像这样你要发出来给别人看就不能忽略,给别人造成困扰。
lisonfan
2016-11-01 17:08:11 +08:00
@SeanChense 嗯嗯,刚刚把配置改了

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

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

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

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

© 2021 V2EX