[英]Reactive Cocoa: Response from HTTPRequest using RACCommand
我是 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 塊中,我收到的對象是一個 RACEvent 對象,而不是我期望的字典。 我知道我做錯了什么並且沒有正確理解完整的流程,我嘗試添加我認為我不需要的地圖功能只是為了測試而什么都沒有。
我發現的唯一方法是將 map 塊中的響應轉換為 RACEvent 並返回其值,但在我看來這不是正確的方法。
任何光將不勝感激。
從命令的信號塊中刪除對-[RACSignal materialize]
的調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.