使用ReactiveCocoa遇到的第一个坑

综合编程 简书

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方法,我试了一下,不会出现上述问题….

简书稿源:简书 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 综合编程 » 使用ReactiveCocoa遇到的第一个坑

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录