- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 Reactive Cocoa Framework 的新手,我只是在做一些简单的测试,但我遇到了一个我想了解的问题。
基本上,我只是执行一个 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 功能只是为了测试什么都不需要。
我找到的唯一方法是将 map block 中的响应转换为 RACEvent 并返回其值,但在我看来这不是正确的方法。
任何光线都将不胜感激。
最佳答案
从命令的信号 block 中删除对 -[RACSignal materialize]
的调用。
关于ios - ReactiveCocoa : Response from HTTPRequest using RACCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22645870/
使用 ReactiveCocoa 2.0,是否有更好的方法来执行以下操作,而无需具体化/取消具体化,并且仍然能够从 3 个信号中的任何一个捕获错误,而无需重复代码? 有 3 个登录按钮。每个都返回一个
我一直在研究 MVVM example ,使用 ReactiveCocoa,它是一个 Collection View 中的 App.net 帖子的简单集合,它在到达 Collection View 的
我正在使用 UAGitHubEngine 访问 GitHub 的 API。我想编写一个功能性的响应式(Reactive)应用程序来获取一些数据。我依赖于代码 here设置异步网络请求。我正在寻找的是某
在 MVVM pattern , ViewModel发个RACCommand和 View使用 RACCommand 绑定(bind)按钮,但是如何测试RACCommand ? 我有两个方面需要测试:
我有一个用于保存数据元素数组的 UITableView 的 ViewModel。 UITableView 实现了下拉刷新和无限滚动行为。数据元素是通过 RestKit 从服务器以分页方式请求的,这意味
我如何创建 2 个 RACCommand,以便在另一个执行时禁用一个,并且反之亦然? 像这样, _prevTrackCommand = [[RACCommand alloc] initWithEnab
我将 RACCommand 用于我的 UI 按钮单击事件。我正在使用 MVVM 架构。在我的 ViewModel 中,我有这个: @property (strong, nonatomic) RACCo
我有一个 View 和一个 View 模型。 View 包含一个按钮,每次用户按下它时,我都希望 View Model 得到通知。我还希望在第一个 View 模型收到事件时通知第二个 View 模型。
我是 Reactive Cocoa Framework 的新手,我只是在做一些简单的测试,但我遇到了一个我想了解的问题。 基本上,我只是执行一个 API 调用以从我的服务器获取一个 JSON 对象,我
我学习了很多关于 ReactiveCocoa 的知识但有一件事仍然让我感到困惑:为什么 RACCommand 上的信号 block 本身会返回一个信号? 我了解 RACCommand 的用例、它的 c
我有一个登录按钮,其中分配了一个 RACCommand 来执行登录请求并返回一个用户对象。 我想处理按钮信号错误中的错误。 loginButton.rac_command.executionSigna
我在我的应用程序中使用 ReactiveCocoa 框架来获得使用 MVVM 设计模式的强大功能。 所以对于每个 Controller ,我都有一个 ViewModel。并且Controller绑定(
我是一名优秀的程序员,十分优秀!