2013-10-19 53 views
4

对于活性可可,我还是比较新的,我试图在游戏中加入玻璃钢的元素。在我的网上搜索中,Reactive cocoa的资源和文档看起来非常有限,大多数教程都使用相同的示例!使用活性可可观察UITouches?

我想要做的就是让RACSignal为视图上的当前触摸提供一个值流(假设为了简单起见,不需要多点触摸)。然后使用subscribeNext在UITouch对象发生变异时执行我的操作。我无法设置RAC信号本身!

目前Im做以下(其中林不知道是正道!)

@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模型)中使用触摸信号并使用订阅接下来在块中执行操作?

回答

2

这就是我将如何使用-rac_signalForSelector:。这是更具说明性的,不太必要的(这是我认为你的错误来自的地方)。

RACSignal *touchSignal = [[[self 
    rac_signalForSelector:@selector(touchesBegan:withEvent:)] 
    reduceEach:^(NSSet *touches, UIEvent *event) { 
     return [touches anyObject]; 
    }] 
    distinctUntilChanged] 
+0

谢谢你一定会试试看。和我假设我可以订阅(使用[[MyViewInstance触摸信号] subscribeNext:....])到我的touchSignal在另一个对象,只要它的MyView公共属性? – Sagar

+0

是的,任何可以访问信号的代码都可以订阅它。 –

+0

试过了。有同样的问题!我得到这个 终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [MyView rac_signalForSelector:]:无法识别的选择发送到实例0x20874d80'。 我错过了什么? – Sagar