RestKit 在调用时删除路径

Posted

技术标签:

【中文标题】RestKit 在调用时删除路径【英文标题】:RestKit removes path when it makes calls 【发布时间】:2013-03-13 20:50:52 【问题描述】:

为什么在进行 API 调用时 RestKit 会删除我的路径?它表明它在通话之前很好。

我就是这样注册的

AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"apiURL"]]];
[client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];
[client setParameterEncoding:AFJSONParameterEncoding];
RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
NSLog(@"Created client: %@", objectManager.HTTPClient);

这是我在其他类中的称呼

RKObjectManager *manager = [RKObjectManager sharedManager];
NSLog(@"HTTP Client: %@", manager.HTTPClient);

即使在我调用 shared objectManager 的其他类中,它也是正确的,但我在调用过程中会记录日志并且响应错误,因为 /api/v1 已被取出。

NSLOG

2013-03-13 13:24:08.960 Project[54631:403] HTTP Client: <AFHTTPClient: 0x1033d6230, baseURL: https://my.server.com/api/v1/, defaultHeaders: 
    Accept = "application/json";
    "Accept-Language" = "en, ja, fr, de, es, it, pt, pt-PT, nl, sv, nb, da, fi, ru, pl, zh-Hans, zh-Hant, ko, ar, cs, hu, tr, en-us;q=0.8";
    Authorization = "Bearer <My Access Token>";
    "User-Agent" = "Project/1.0 (Mac OS X Version 10.7.5 (Build 11G63))";
, registeredOperationClasses: (
), operationQueue: <NSOperationQueue: 0x1033db8c0>name = 'NSOperationQueue 0x1033db8c0'>
2013-03-13 13:24:08.960 Project[54631:403] Manager: <RKObjectManager: 0x1033db940>
2013-03-13 13:24:08.971 Project[54631:403] I restkit.network:RKHTTPRequestOperation.m:154 GET 'https://my.server.com/features/1234?with_lock=false'
2013-03-13 13:24:09.310 Project[54631:403] I restkit.network:RKHTTPRequestOperation.m:185 GET 'https://my.server.com/features/1234?with_lock=false' (200 OK)

【问题讨论】:

【参考方案1】:

您是否曾经为 RESTKIt - Instance 设置过 baseUrl? 你做了一个

[[RKObjectManager alloc] initWithHTTPClient:client]

新实例。

但后来你打电话

[RKObjectManager sharedManager]

首先尝试初始化一个共享的 RKobject 例如: [RKObjectManager objectManagerWithBaseURL:... 而不是使用共享实例来创建新的 AFHTTPClient 对象。

【讨论】:

我试过[RKObjectManager managerWithBaseURL:],当我打电话给[sharedManager]时它没有保留httpclient。 initWithHTTPClient 也设置了 sharedManager。 就像 TClaus 已经说过的,您的配置似乎是错误的。您不需要像以前那样设置AFHTTPClient。使用基本 url 简单地设置 RKObjectManager 并使用 [[RKObjectManager sharedManager].HTTPClient 访问客户端(例如对于标头)。 查看我的答案,问题可能是你的绝对路径。【参考方案2】:

你可以这样设置,对我有用:

static NSString *BASE_URL = @"http://www.yourdomain.com/api/v2";
RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:BASE_URL]];
[objectManager postObject:rating path:@"ratings" parameters:nil success:nil failure:nil];

问题在于我提供了一个绝对路径:例如@"/ratings" 而不是 @"ratings"。

【讨论】:

以上是关于RestKit 在调用时删除路径的主要内容,如果未能解决你的问题,请参考以下文章

Restkit 从核心数据中删除项目

使用restkit api目标c调用Web服务时出错

RestKit 删除语义

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

RestKit 网络限制在并行请求运行时阻止其他调用

RestKit 0.20 嵌套对象映射(对象树的路径不同)