Restkit 从 Foursquare API 返回 nil 响应

Posted

技术标签:

【中文标题】Restkit 从 Foursquare API 返回 nil 响应【英文标题】:Restkit returning nil response from Foursquare API 【发布时间】:2015-01-11 01:43:19 【问题描述】:

我正在尝试通过“http://www.raywenderlich.com/58682/introduction-restkit-tutorial”学习 RestKit,同时尝试了网站上提供的示例代码。好吧,我的主要问题是 RestKit 没有返回响应,即使我发送给 API 的请求是正确的,并且当我通过浏览器测试它时得到了响应。

这是来自网站的代码(唯一的变化是我发送了一些其他参数):

- (void)configureRestKit

    // initialize AFNetworking HTTPClient
    NSURL *baseURL = [NSURL URLWithString:@"https://api.foursquare.com"];
    AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:baseURL];

    // initialize RestKit
    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];

    // setup object mappings
    RKObjectMapping *venueMapping = [RKObjectMapping mappingForClass:[Venue class]];
    [venueMapping addAttributeMappingsFromArray:@[@"name"]];

    // register mappings with the provider using a response descriptor
    RKResponseDescriptor *responseDescriptor = 
        [RKResponseDescriptor responseDescriptorWithMapping:venueMapping 
                                                     method:RKRequestMethodGET 
                                                pathPattern:@"/v2/venues/search" 
                                                    keyPath:@"response.venues" 
                                                statusCodes:[NSIndexSet indexSetWithIndex:200]];

    [objectManager addResponseDescriptor:responseDescriptor];



- (void)loadVenues

    NSString *near = @"Chicago, IL";
    NSString *clientID = kCLIENTID;
    NSString *clientSecret = kCLIENTSECRET;

    NSDictionary *queryParams = @@"near" : near,
                                  @"client_id" : clientID,
                                  @"client_secret" : clientSecret,
                                  @"categoryId" : @"4bf58dd8d48988d1e0931735",
                                  @"v" : @"20140118";

    [[RKObjectManager sharedManager] getObjectsAtPath:@"/v2/venues/search"
                      parameters:queryParams
                         success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
                                     _venues = mappingResult.array;
                                     [self.tableView reloadData];
                                 
                         failure:^(RKObjectRequestOperation *operation, NSError *error) 
                                     NSLog(@"What do you mean by 'there is no coffee?': %@", error);
                                 ];

这里是 API 请求 URL:

https://api.foursquare.com/v2/venues/search?categoryId=4bf58dd8d48988d1e0931735&client_id=kCLIENTID&client_secret=kCLIENTSECRET&near=Chicago%2C%20IL&v=20150110

我在成功块中的“mappingResult”对象是:

<RKMappingResult: 0x7cb4f6d0, results=
    "response.venues" =     (
    );
>

而“操作”对象是:

<RKObjectRequestOperation: 0x78e697c0, state: Successful, isCancelled=NO, request: <NSMutableURLRequest: 0x78e4f2f0>  URL: https://api.foursquare.com/v2/venues/search?categoryId=4bf58dd8d48988d1e0931735&client_id=kCLIENTID&client_secret=kCLIENTSECRET&near=Chicago%2C%20IL&v=20150110 , response: <NSHTTPURLResponse: 0x79a46e40 statusCode=200 MIMEType=application/json length=35120>>

知道发生了什么吗?

附:要测试我提供的 URL,您需要将 kCLIENTID 和 kCLIENTSECRET 替换为您的客户端 ID 和客户端密码信息。

【问题讨论】:

你得到什么响应 JSON?打开跟踪日志,它显示什么? 【参考方案1】:

将 queryParams 更改为

NSString *ll = @"40.7,-74.20";

NSDictionary *queryParams = @@"ll": ll,
                                  @"client_id" : clientID,
                                  @"client_secret" : clientSecret,
                                  @"categoryId" : @"4bf58dd8d48988d1e0931735",
                                  @"v": @"20140118"
                                  ;

【讨论】:

以上是关于Restkit 从 Foursquare API 返回 nil 响应的主要内容,如果未能解决你的问题,请参考以下文章

在 Foursquare 的 Lists API 上使用 RKDynamicMapping 来捕获列表

使用 Python 代码从 Foursquare API 中提取特定场地类别

Restkit给出映射错误:

如何在Web API中使用C#获取Foursquare OAuth请求代码?

如何使用foursquare api在foursquare上添加新的特价商品

Foursquare 场地搜索 API:如何找到最近的场地?