ios - react 性 cocoa : Response from HTTPRequest using RACCommand

标签 ios reactive-cocoa

我对 Reactive Cocoa 框架完全陌生,我只是在做一些简单的测试,但我遇到了一个我想了解的问题。

基本上,我只是执行 API 调用以从我的服务器获取 JSON 对象,我想使用 RAC 来执行此操作。所以我的步骤如下:

首先我这样构建 RACCommand:

RACCommand *getLatestVersionCommand = [[RACCommand alloc] initWithSignalBlock:^RACSignal *(id input) {
    return [[[API sharedInstance] getLatestAppVersion]
                materialize];
}];

现在我创建信号并以这种方式订阅它:

RACSignal *versionCodeSignal = [[getLatestVersionCommand.executionSignals flatten] deliverOn:[RACScheduler mainThreadScheduler]];
[[versionCodeSignal
    map:^id(NSDictionary *responseObject) {
        return responseObject;
    }]
    subscribeNext:^(NSDictionary *responseObject) {
        NSArray *allVersions = [[NSArray alloc] initWithArray:[responseObject objectForKey:KEY_VERSIONS]];
        for(NSDictionary *version in allVersions) {
            NSString *device = [version objectForKey:KEY_DEVICE];
            if([device isEqualToString:KEY_IOS]) {
                NSString *latestVersionName = [[version objectForKey:KEY_VERSION] objectForKey:KEY_NAME];
                if([APP_VERSION compare:latestVersionName options:NSNumericSearch] == NSOrderedAscending) {
                    //There is a new version!
                    NSLog(@"There is a new version!!!");
                }
            }
        }
    }];

最后我这样执行命令

[getLatestVersionCommand execute:self];

我面临的问题是,在 subscribeNext block 中,我收到的对象是 RACEvent 对象,而不是我期望的字典。我知道我做错了,没有正确理解整个流程,我尝试添加 map 功能,我认为我不需要只是为了测试,什么也没有。

我发现的唯一方法是将映射 block 中的响应转换为 RACEvent 并返回其值,但这在我看来不是正确的方法。

任何光线都将不胜感激。

最佳答案

从命令的信号 block 中删除对 -[RACSignal Materialize] 的调用。

关于ios - react 性 cocoa : Response from HTTPRequest using RACCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645870/

相关文章:

ios - UITableView setEditing 不会为标签约束更改设置动画

javascript - iOS 获取过去的登录表单。

ios - 绑定(bind)剂量似乎不适用于 ReactiveCocoa Swift

cocoa - 如何在 ReactiveCocoa 中的信号序列之间创建延迟?

ios - 如何使用 Reactive Cocoa 以正确的方式链接信号?

iOS Pusher 不起作用,客户端未连接

ios - 快速处理 SWRevealViewController 中的 CellForRowAtIndexPath?

ios - 如果在我标记所有内容不要备份后仍然在 iCloud 上存储少量数据,我的应用程序是否会再次被拒绝?

swift - 如何将 Property<Int> 转换为 SignalProducer<Int, PossibleError>?

objective-c - 我应该在 ReactiveCocoa MVVM 中重新绑定(bind)模型吗?