使用ReactiveCocoa遇到的第一个坑

综合编程 2017-04-14

ReactiveCocoa是响应式编程(FRP)在 iOS
中的一个实现框架,它的开源地址为: https://github.com/ReactiveCocoa/ReactiveCocoa#
;各位牛人大神对其也是盛赞有加,所以在项目我就试着使用了这个框架,果不其然,是个好东西。这次要说的不是介绍如何使用它,而是记录我在使用该框架过程中遇到的一个坑。

项目背景:

列表TableView中有多个cell(自定义),cell里面有个按钮,点击按钮响应事件,进行网络请求,加载新数据。就这么一个简单的过程,我却折腾了半个小时,最后各种调试终于找出问题关键。

由于项目里面引进了ReactiveCocoa,所以在实现上述按钮的响应方法的时候,我就使用了该框架中的按钮的信号量方法

[[cell.actionBtn
   rac_signalForControlEvents:UIControlEventTouchUpInside]
   subscribeNext:^(id x) {
     //进行网络请求
     NSLog(@"doSomeThing");
   }];

上述方法我是写在tableview的代理方法cellForRowAtIndexPath:里面。那么问题就出现了。

众所周知,UITableViewCell是可以复用的,假设当前屏幕上只能显示四个cell,那么当第五个cell出现的时候,他用的是第一个消失cell、以此来达到节省内存的目的。我遇到的问题是点击前四个cell上的按钮是正常情况,当我点击第五个,第六个...(复用的)cell上的按钮时,按钮的响应方法居然响应了多次,没错是响应了多次,不用说了肯定是按钮和cell的绑定出问题了。于是我是反复的检查代码,反复的检查,反复的检查,实在找不出问题在哪(这不应该啊,以前也是这么写的,不会有问题啊,这次怎么就有BUG了呢?一万个草泥马奔腾中...),后来我把按钮的响应方法换成这种格式,就尼玛立刻见效

[cell.actionBtn addTarget:self action:@selector(actionBtn 🙂 forControlEvents: UIControlEventTouchUpInside];

问题解决了,半个小时时间也没有了。不知道是ReactiveCocoa框架的那个按钮方法有问题还是我使用的格式有问题,就这样默默的泪崩。。。不过关于按钮信号量的响应方法该框架还提供了另一种格式按钮的RACCommand方法,我试了一下,不会出现上述问题....

简书

责编内容by:简书 (源链)。感谢您的支持!

您可能感兴趣的

ReactiveCocoa 源码解析之核心流程 本文基于ReactiveObjC 3.1.0版本进行解析。共分两部分: 一、核心流程。 二、分析实践。 一、核心流程 创...
Reactivecocoa 5.0 入门 文章出自此链接 最近再重新学习swift,从OC的RAC转到Swift的RAC方法调用大变样,各种的不适应。 简单了解 ...
ReactiveCocoa小结 本文是来自@厦大的投稿 ReactiveCocoa(简称RAC)是由GitHub团队开源的一套基于Cocoa的并且具有FRP特性的框架。FRP(F...
ReactiveCocoa+MVVM实践篇 实现一个完整的登陆界面 本文Demo地址: https://github.com/iOSaFei/ReactiveCocoa-MVVM- 效果...
ReactiveCocoa的使用 对于使用MVC的小伙伴来说,随着业务的增多,代码会显得越来越臃肿。 本人也是如此感觉,于是学习ReactiveCocoa来进行MVVM...