美文网首页
oc rac在tableViewCell中的坑

oc rac在tableViewCell中的坑

作者: 纳兰怮翌 | 来源:发表于2018-06-14 17:57 被阅读0次

    这次做的项目中用到了rac这个第三方的控件,第一次用嘛,感觉很好用,也是没有经验,但是确实代码量减少了很多,同时对于项目中大量用到代理,通知都阔以用block的方式来代替,我是觉得很好用的,但是坑也很多
    第一个坑就是cell重用的导致回调多次的原因
    声明一点我个人喜欢将cell里面的东西完全的写在cell里面包括初始化都喜欢在里面初始化,所以在外面暴露的就只有cell的赋值方法
    先来看看填坑之前的写法

      //在cell文件里面调用的
      //在.h文件里面声明代理
    @property (nonatomic, strong)RACSubject *submitDelegateSignal,*imageDelegateSignal,*fileDelegateSignal;
    //在.m文件里面初始化
    - (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
        self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
        if (self) {
            _ submitDelegateSignal = [RACSubject subject];
            [[_submitButton rac_signalForControlEvents:UIControlEventTouchUpInside]  subscribeNext:^(__kindof UIControl * _Nullable x) {
                if (_submitDelegateSignal) {
                    [_submitDelegateSignal sendNext:_model];
                }
            }];
         }
    return self;
    }
    //在tableView 的 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;方法里面直接调用
    [cell.submitDelegateSignal subscribeNext:^(id  _Nullable x)  {
            NSLogin(@"sssss");
        }];
    

    这样写了之后你会发现刚进这个界面是没有问题的,只打印一次,当数据加载多了之后出现分页之后就会发现会多次重复的打印
    解决办法

     - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        cell.submitDelegateSignal = [RACSubject subject];
        [cell.submitDelegateSignal subscribeNext:^(id  _Nullable x)  {
            NSLogin(@"sssss");
        }];
    }
    //在cell.m文件中
    [[[_submitButton rac_signalForControlEvents:UIControlEventTouchUpInside] takeUntil:self.rac_willDeallocSignal] subscribeNext:^(__kindof UIControl * _Nullable x) {
                if (_submitDelegateSignal) {
                    [_submitDelegateSignal sendNext:_model];
                }
            }];
    

    但是我在网上看见踩过坑的前辈都是用的self.rac_deallocDisposable这个来代替self.rac_willDeallocSignal ,我现在还不知道原理,还在研究中,所以有知道的大佬能给我说一下,谢谢

    相关文章

      网友评论

          本文标题:oc rac在tableViewCell中的坑

          本文链接:https://www.haomeiwen.com/subject/uioyeftx.html