RESTKit:BaseURL 和路径模式

Posted

技术标签:

【中文标题】RESTKit:BaseURL 和路径模式【英文标题】:RESTKit: BaseURL & Path Pattern 【发布时间】:2014-03-22 14:57:23 【问题描述】:

ios7 和 RESTKit 0.20.3

以下是我需要点击以从 Google Maps API 获得响应的 URL(我更改了密钥):

https://maps.googleapis.com/maps/api/place/autocomplete/json?input=coffee&sensor=true&key=1234&location=0.000000,0.000000&radius=100.000000

当我在浏览器中输入上面的 URL 时,我会返回一个 JSON (200 OK)

input 是用户提供的搜索字符串。我已将其硬编码到上面的 URL 中。

以下是我尝试过的,得到 404 错误:

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/placeautocomplete/json?input=%@&sensor=true&key=1234&location=0.000000,0.000000&radius=100.000000", [input stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];

NSURLRequest *request = [NSURLRequest requestWithURL:url];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping
                                                                                            method:RKRequestMethodGET
                                                                                       pathPattern:@""
                                                                                           keyPath:@"predictions" statusCodes:statusCodeSet];

我还尝试了以下给出错误Code=1001 "No response descriptors match the response loaded." 的方法:

NSIndexSet *statusCodeSet = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful);
RKMapping *mapping = [TBSRESTMappingProvider googleAutoCompleteMapping];

NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/autocomplete/json?input=coffee&sensor=true&key=1234&location=0.000000,0.000000&radius=100.000000"]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];


RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping
                                                                                        method:RKRequestMethodGET
                                                                                   pathPattern:@""
                                                                                       keyPath:@"predictions" statusCodes:statusCodeSet];

RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:request
                                                                    responseDescriptors:@[responseDescriptor]];
    在不硬编码 input sensor location keyradius 的情况下提供完整 URL 的最佳做法是什么? 如何修复Code=1001 "No response descriptors match the response loaded."

【问题讨论】:

【参考方案1】:

您请求的 URL 路径需要与您提供给响应描述符的路径模式相匹配。如果您想按照自己的方式工作,请将路径模式设置为 nil(匹配所有内容)。

最佳实践通常是使用 RKObjectManager 实例并调用 getObjectsAtPath:parameters:success:failure: 并传递应附加到请求 URL 的参数字典(由基本 URL、路径和参数构建)。

【讨论】:

谢谢。我一直在谷歌搜索附加请求 URL 的示例。你能给我指一个吗? “追加”是什么意思?您在对象管理器上设置基本 URL,将路径和参数传递给 get 方法... 我是否在 getObjectsAtPath:baseURL BaseURL = maps.googleapis.com/maps/api/place/autocomplete/json 中设置 baseurl?对于参数,我将有一本字典。 “输入”:“随便”? 在创建 RKObjectManager 实例时设置基本 URL。

以上是关于RESTKit:BaseURL 和路径模式的主要内容,如果未能解决你的问题,请参考以下文章

逗号分隔的动态参数的 RestKit 路径模式

RestKit 无法识别带有参数的路径模式

RestKit:setBaseURL 导致内存泄漏

ios - Restkit 和 SSL 证书错误

RestKit 仅在模拟器上返回 ErrorDomain Code=-1011

带有自定义 url 的 RKResponseDescriptor