我对反应性可可相当新,我试图在我试图构建的游戏中包含FRP的元素.从我的在线搜索中,Reactive
cocoa的资源和文档似乎非常有限,大多数教程都使用相同的示例!
我想要做的是,有一个RACSignal,为视图上的当前触摸提供一个值流(为简单起见,假设没有多点触摸).然后使用subscribeNext在UITouch对象发生变异时执行我的操作.我自己设置RAC信号时遇到了麻烦!
目前我正在做以下(我不确定是正确的方法!)
@interface MyView:UIView{
UITouch *currentTouch;
RACSignal *touchSignal;
}
@property(nonatomic , assign)UITouch *currentTouch;
@implementation MyView
@synthesize currentTouch;
-(id)init{
if(self = [super init]){
}
return self;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSArray *touchArray = [touches allObjects];
for(UITouch *touch in toucheArray){
currentTouch = touch;
if(!touchSignal){
touchSignal = [RACObserve(self , currentTouch) distinctUntilChanged];
}
}
}
但每当我RACSignal尝试初始化游戏崩溃时,我得到以下内容:
[MyView rac_valuesForKeyPath:observer:]: unrecognized selector sent to instance 0x2084cf90
我究竟做错了什么?设置RACSignal的正确方法是什么?另外,我如何在不同的对象(可能是MyView模型)中使用touchSignal并使用subscribe next来执行块中的操作?
最佳答案 我是这样做的,使用-rac_signalForSelector:.这更具说明性,更少命令性(这是我认为你的bug来自的地方).
RACSignal *touchSignal = [[[self
rac_signalForSelector:@selector(touchesBegan:withEvent:)]
reduceEach:^(NSSet *touches, UIEvent *event) {
return [touches anyObject];
}]
distinctUntilChanged]