2015-08-03 21 views
0

我试图创建将在处置时取消NSURLSessionDataTask的信号。问题是,我不能等到任务完成,直到我可以发送下(实施Server-sent Events)值,但我不得不使用NSURLSession小号委托方法。RACSubject和处置

我在做什么,现在是建立一个RACSubject并返回它为每一个新的请求。在新事件到达后,我就sendNext:了解了这个问题。我所遇到的问题是如果没有更多的用户在这个问题上搞清楚何时有效地取消任务。

一种解决方法,我发现迄今是创建一个虚拟信号和与对象合并它(见下文)。

return [[RACSignal createSignal:^RACDisposable *(id <RACSubscriber> subscriber) { 
    return [RACDisposable disposableWithBlock:^{ 
     if (dataTask.state != NSURLSessionTaskStateCanceling && dataTask.state != NSURLSessionTaskStateRunning) { 
      [dataTask cancel]; 
     } 
    }]; 
}] 
    merge:self.requests[@(dataTask.taskIdentifier)][kSubjectKey]]; 

但是必须有更优雅的方式,或者?另外一个缺点是,信号永远不会完成。如果在dummy信号内有,则会立即调用dispose块。

我使用ReactiveCocoa 2.5.X

回答

0

你检查出这个library。基本上,所有你需要的是把委托方法成块,然后你可以使用声明creatSignal:调用内部的块。如果您想自己将代表方法封装到块中,请查看post

+0

这可能是一个解决办法,是的。但是我感兴趣,如果有一种方法只使用框架来解决这个问题。 – mAu