Restkit。在故事板上显示响应正文

时间:2013-11-05 12:14:25

标签: objective-c json restkit restkit-0.20

我想在故事板上显示我从服务器获取的响应主体,我正在进行连接like this。 当我运行应用程序时,我得到以下响应:

response.body={"id":2,"token":"xyzzyzzyx"}
2013-11-05 11:36:52.405 networkTest3[1327:70b] It Worked: (
    "<LoginResponse: 0x8b508a0>"
)

我试图在主视图上显示来自LoginResponse的数据,遵循CoffeeShop示例,但由于RestKit版本(我使用最后一个,现在为0.20),似乎有很多不同之处。我已经知道如何将类中的数据连接到接口上的Outlets,但我无法找到如何从响应主体获取数据。

我试图在LoginResponse类

上使用此方法
- (void)loadToken{
    RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[LoginResponse class]];

    [mapping addAttributeMappingsFromDictionary:@{
                                                  @"id":   @"status",
                                                  @"token":   @"token",
                                                  }];
        RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:nil keyPath:@"" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

    NSURL *URL = [NSURL URLWithString:@"http://myurl.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];

    [objectRequestOperation start];
}

我得到了这个:

2013-11-05 12:09:56.867 networkTest3[1585:3307] E restkit.network:RKObjectRequestOperation.m:576 Object request failed: Underlying HTTP request operation failed with error: (null)

我做错了什么,我的下一步是什么?

编辑:我试图在LoginManager.m

上添加它
[responseMapping addAttributeMappingsFromDictionary:@{@"id" : @"id", @"token" : @"token"}];

但我得到了

libc++abi.dylib: terminating with uncaught exception of type NSException
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to add mapping for keyPath token, one already exists...'

1 个答案:

答案 0 :(得分:0)

您还没有在您正在制作的结果上设置任何标题,因此服务器不知道如何正确回复请求。如果出现空值错误,则无法更真实地说出来。您的映射看起来很好,您的日志显示已创建相应的对象。

请考虑在请求中至少设置Accepts标头,或使用RKObjectManager为您处理请求管理。


如果那不是真正的错误并且您的映射正常(看起来基本上没问题),那么您的问题是您没有调用setCompletionBlockWithSuccess:failure:因此您永远不会收到对象的回调在映射过程中创建的。

同样,使用RKObjectManager会使这更容易处理,更难忘记/错过......