• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 14:19:21 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

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

- (RACSignal *)postJSONDataNSDictionary *)dict toRelativeURLNSString *)urlString;

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

[subscriber sendNext:json]或错误:[subscriber sendError:jsonError]

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

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

有很多方法可以做到这一点,但我想使用 ReactiveCocoa 以正确的方式做到这一点。我想我可以用 concat:then:rac_sequence map:^ 来做到这一点,但我不确定.在他们的 github 页面上,他们展示了一个解决并行工作流的示例,但他们使用了 2 个离散定义的信号。在循环遍历需要保存的每个对象之前,我不会收到信号。希望得到一些指导或示例(甚至更好!)。提前致谢。



Best Answer-推荐答案


我在我的应用程序中做了类似的事情,我启动了 3 个不同的异步网络调用,并将它们全部组合成一个我可以收听的信号。基本上我遍历所有对象并将网络信号存储在一个数组中。然后我调用 merge: 并将网络信号数组传递给它。

NSMutableArray *recievedNames = [NSMutableArray new];
NSMutableArray *signals = [NSMutableArray new];

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

//forward all network signals into one signal
return [[[RACSignal merge:signals] doNext:^(NSString *x) {
    [recievedNames addObject:x];
}] then:^RACSignal *{
    return [RACSignal return:[self optimalNameForBarcodeProductWithNameCollection:recievedNames]];
}];

请随时向我询问有关我使用过的任何运算符的问题,我会尽力解释。

关于ios - 如何知道何时使用 ReactiveCocoa 异步保存所有对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28548358/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap