【问题标题】:Restkit did not match pattern when response comes back响应返回时,Restkit 与模式不匹配
【发布时间】:2013-10-09 11:11:23
【问题描述】:

我已经看到很多这种性质的帖子,其中结尾的“/”(或缺少)会导致模式匹配失败。

然而,我的问题是没有匹配的模式。 我的错误如下所示:

“没有响应描述符与加载的响应匹配。” UserInfo=0xcb8a660 {NSErrorFailingURLStringKey=http://domain.herokuapp.com/auth/identity/callback, NSLocalizedFailureReason=从 URL 'http://domain.herokuapp.com/auth/identity/callback' 加载了 200 响应, 未能匹配所有 (3) 个响应描述符: http://domain.herokuapp.com pathPattern=(null) 状态码=200-299> 匹配失败:响应路径“/auth/identity/callback”与路径模式“(null)”不匹配。

“与路径模式'(null)'不匹配”是我认为的问题。

设置objectmanager和HttpClient:

+ (void) fireUpRestkit
{
    RKLogConfigureByName("RestKit/Network", RKLogLevelTrace);

    //base URL @"http://domain.herokuapp.com"
    NSURL *baseURL = [[SCURLManager sharedInstance] baseURL];
    AFHTTPClient * client = [AFHTTPClient clientWithBaseURL:baseURL];

    [client setDefaultHeader:@"Accept" value:RKMIMETypeJSON];

    RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client];
    NSAssert(objectManager, @"objectManager did not instantiate correctly");
}

我的请求如下所示:

[[RKObjectManager sharedManager] postObject:user
                                           path:/auth/identity/callback"
                                     parameters:nil
                                        success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {

我的描述符是这样设置的:

    RKObjectManager *objectManager = [RKObjectManager sharedManager];

RKObjectMapping *userMapping = [RKObjectMapping mappingForClass:[SCUserEntity class]];
[userMapping addAttributeMappingsFromDictionary:[SCUserEntity keyMapping]];

RKRequestDescriptor * requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:userMapping.inverseMapping
                                                                                objectClass:[SCUserEntity class]
                                                                                rootKeyPath:nil
                                                                                     method:RKRequestMethodPOST];

RKResponseDescriptor * responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:userMapping
                                                                                         method:RKRequestMethodGET
                                                                                    pathPattern:nil
                                                                                        keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

[objectManager addResponseDescriptor:responseDescriptor];
[objectManager addRequestDescriptor:requestDescriptor];

我找不到我在执行 postRequest 时给出的模式的原因似乎没有 当请求返回时就在那儿。 我已经逐步完成了buildResponseMappingsDictionary 和后续的matches~ 方法。发出请求时,它们都返回正确的描述符,但是当请求需要映射时,它就不起作用了。

我从服务器得到 200 OK,我看到了请求和响应正文,它们看起来是正确的。

希望有人能帮我找出可能明显缺失的部分:)

【问题讨论】:

  • 你设置了什么基本网址?单步执行时,哪个部分不起作用?
  • 我在问题中添加了 objectmanager 和 httpclient 的设置。我认为那里没什么特别的。一切正常,直到 RestKit 尝试将生成的 JSON 映射到 UserEntity。似乎无法获得与模式匹配的 responseDescriptor。错误:“匹配失败:响应路径'/auth/identity/callback'与路径模式'(null)'不匹配。, NSLocalizedDescription=没有响应描述符匹配加载的响应”

标签: ios restkit-0.20


【解决方案1】:

它与路径模式无关。就是方法。

您正在使用:

[[RKObjectManager sharedManager] postObject:user ...

但是你有一个响应描述符:

method:RKRequestMethodGET

即一个用于 POST,一个用于 GET

【讨论】:

  • 您能详细说明一下吗?我的理解是,我设置了一个 RKRequestDescriptor,当我使用此对象执行 Post Request 时使用它,而当我希望从后端取回此类对象时使用 RKResponseDescriptor。我正在为新的 0.20 版本的 Restkit 苦苦挣扎。
  • method:RKRequestMethodGET 更改为method:RKRequestMethodPOST
  • 这对我有帮助。我什至没有考虑过。
猜你喜欢
  • 1970-01-01
  • 2017-05-25
  • 2014-06-04
  • 2012-11-14
  • 1970-01-01
  • 2015-01-20
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多