gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:33 25 4
gpt4 key购买 nike

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

- (RACSignal *)postJSONData:(NSDictionary *)dict toRelativeURL:(NSString *)urlString;

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

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

这在保存单个对象时效果很好,但我也遇到了必须保存多个对象的情况。这些对象可以按任何顺序(即它们彼此不依赖)或按顺序保存 - 这对我来说无关紧要。

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

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

最佳答案

我在我的应用程序中做了类似的事情,我开始了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com