4

我有一个返回 plist 的 WS。
我正在使用 Restkit,我想映射响应。

所以首先我像这样初始化我的 ObjectManager:

sharedInstance.manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:ROOT_URL]];

我接受文本/xml:

[[RKObjectManager sharedManager] setAcceptHeaderWithMIMEType:RKMIMETypeTextXML];

我提出了我的要求:

NSMutableURLRequest *request = [[RKObjectManager sharedManager] requestWithObject:nil method:RKRequestMethodPOST path:@"/foo/foo" parameters:nil];
RKManagedObjectRequestOperation *operation = [[RKObjectManager sharedManager] managedObjectRequestOperationWithRequest:request managedObjectContext:[BddManager sharedInstance].manager.managedObjectStore.mainQueueManagedObjectContext success:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
    NSLog(@"Loading mapping result: %d", result.count);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"Fail!");
}];
[operation start];

最后我得到这个错误:

NSLocalizedDescription=Expected content type {(
"application/x-www-form-urlencoded",
"application/json"
)}, got text/xml, 

我究竟做错了什么?

4

2 回答 2

10

RestKit 0.20.0rc1 在主存储库中不包含 XML 序列化程序,但您可以在此处找到一个:RKXMLReaderSerialization

通过 cocoapods 安装:(或将源文件添加到您的项目中)

pod 'RKXMLReaderSerialization', :git => 'https://github.com/RestKit/RKXMLReaderSerialization.git', :branch => 'master'

导入初始化 RestKit 的标头。

#import "RKXMLReaderSerialization.h"

最后,向 RestKit 注册序列化类。在初始化对象管理器之后和设置接受标头之前插入它。

sharedInstance.manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:ROOT_URL]];
[RKMIMETypeSerialization registerClass:[RKXMLReaderSerialization class] forMIMEType:@"application/xml"];
[[RKObjectManager sharedManager] setAcceptHeaderWithMIMEType:RKMIMETypeTextXML];
于 2013-02-28T17:41:36.683 回答
0

1) 您需要告诉 RKObjectManager 如何处理加载过程后正在序列化的数据。

[objectManager setRequestSerializationMIMEType:RKMIMETypeTextXML];

编辑:

刚刚看到您在谈论一个请求,但是您使用通过 POST 将对象发送到您的 WS 的方法。

要从服务器获取对象,请使用 RestKit 示例应用程序中提供的以下方法。

[[RKObjectManager sharedManager] getObjectsAtPath:@"yourPath" parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    // Success
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    // Error
    RKLogError(@"Load failed with error: %@", error);
}];
于 2013-02-14T21:40:08.587 回答