菜鸟教程小白 发表于 2022-12-12 14:19:21

ios - 如何知道何时使用 ReactiveCocoa 异步保存所有对象


                                            <p><p>在我的应用程序中,我使用 ReactiveCocoa 返回信号以在异步 api 调用完成(成功与否)时通知我。在保存数据的 POST 上,一次只需要一个对象:</p>

<p><code>- (RACSignal *)postJSONData:(NSDictionary *)dict toRelativeURL:(NSString *)urlString;</code>。 </p>

<p>返回 RACSignal 的函数向订阅者发送下一个:</p>

<p><code></code>或错误:<code></code>。</p>

<p>这在保存单个对象时效果很好,但我也有一个场景,我必须保存多个对象。这些对象可以按任何顺序(即它们不相互依赖)或按顺序保存 - 这对我来说并不重要。</p>

<p>我需要更新 UI 以指示总体进度(正在保存 1 个,共 4 个,保存 2 个,共 4 个......)以及最终进度更新(已完成 4 个,共 4 个)和所有完成后要采取的具体操作已处理(成功与否)。</p>

<p>有很多方法可以做到这一点,但我想使用 ReactiveCocoa 以正确的方式做到这一点。我想我可以用 <code>concat:</code> 或 <code>then:</code> 用 <code>rac_sequence map:^</code> 来做到这一点,但我不确定.在他们的 github 页面上,他们展示了一个解决并行工作流的示例,但他们使用了 2 个离散定义的信号。在循环遍历需要保存的每个对象之前,我不会收到信号。希望得到一些指导或示例(甚至更好!)。提前致谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我在我的应用程序中做了类似的事情,我启动了 3 个不同的异步网络调用,并将它们全部组合成一个我可以收听的信号。基本上我遍历所有对象并将网络信号存储在一个数组中。然后我调用 <code>merge:</code> 并将网络信号数组传递给它。</p>

<pre><code>NSMutableArray *recievedNames = ;
NSMutableArray *signals = ;

//go though each database that has been added and grab a signal for the network request
for (GLBarcodeDatabase *database in self.databases) {
    parameters:nil] map:^id(RACTuple *value) {
      return [((NSDictionary *)value.second) valueForKeyPath:database.path];
    }] doError:^(NSError *error) {
      NSLog(@&#34;Error while fetching name from database %@&#34;, error);
    }]
}

//forward all network signals into one signal
return [[ doNext:^(NSString *x) {
    ;
}] then:^RACSignal *{
    return ];
}];
</code></pre>

<p>请随时向我询问有关我使用过的任何运算符的问题,我会尽力解释。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何知道何时使用 ReactiveCocoa 异步保存所有对象,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28548358/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28548358/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何知道何时使用 ReactiveCocoa 异步保存所有对象