4

我对反应性可可相当陌生,我试图在我正在尝试构建的游戏中加入 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 在块中执行操作?

4

1 回答 1

2

我就是这样做的,使用-rac_signalForSelector:. 这是更具声明性,更少强制性(这是我认为你的错误来自哪里)。

RACSignal *touchSignal = [[[self
    rac_signalForSelector:@selector(touchesBegan:withEvent:)]
    reduceEach:^(NSSet *touches, UIEvent *event) {
        return [touches anyObject];
    }]
    distinctUntilChanged]
于 2013-10-21T16:29:56.747 回答