- objective-c - iOS 5 : Can you override UIAppearance customisations in specific classes?
- iphone - 如何将 CGFontRef 转换为 UIFont?
- ios - 以编程方式关闭标记的信息窗口 google maps iOS
- ios - Xcode 5 - 尝试验证存档时出现 "No application records were found"
我有一种情况,我正在发布一个对象(不是托管对象,只是一个 NSObject 派生的对象),但是来自 REST API 的响应不是所发布对象类型的 JSON 表示。这完全是另一回事。有可能处理这个吗?
假设我发布了一个对象 (JSON):
{
"prop1" : 123,
"prop2" : 5
}
并且响应如果不是具有属性 prop1
和 prop2
的对象,正如 RestKit 默认期望的那样,而是其他东西:
{
"data" : [1,2,3,4,5,6],
"message" : "hello world"
}
我见过将 operation.targetObject 设置为 nil 的示例,但(我相信)这仅适用于 Core Data 托管场景。
我正在尝试这样简单的事情:
RKObjectRequestOperation *operation = [self.objectManager appropriateObjectRequestOperationWithObject:body method:RKRequestMethodPOST path:@"items" parameters:nil];
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
// success is called, but the result does not contain what the response JSON is
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
// failure
}];
[operation setWillMapDeserializedResponseBlock:^id(id deserializedResponseBody) {
// deserializedResponseBody is always nil
}];
[operation start];
我以为我可以看到setWillMapDeserializedResponseBlock中的响应内容,但它总是nil。
因为发布的对象具有 prop1
和 prop2
属性,以及 RestKit 默认情况下的工作方式,它需要具有上述属性的 JSON。但是,由于结果与发布的对象无关,prop1
和 prop2
只是 nil(无论如何我都不关心)。
顺便说一下,我已经正确地设置了请求映射,所以在操作对象中传递的 body
正确地映射了我的 NSObject 并以正确的 JSON 格式将它发送到服务器。
有没有一种方法可以让我使用 RestKit 进行这样的调用,并手动提取我在成功事件中寻找的内容?即使它是 JSON 响应的字典表示?
最佳答案
我只是为您的响应创建一个新对象并将您的响应映射到该对象。
@interface MYRequest : NSObject
@property NSNumber *prop1;
@property NSNumber *prop2;
@end
@interface MYResponse : NSObject
@property NSArray *data;
@property NSString *message;
@end
RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];
[requestMapping addAttributeMappingsFromArray:@[@"prop1", @"prop2"]];
RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[MYResponse class]];
[requestMapping addAttributeMappingsFromArray:@[@"data", @"message"]];
RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping
objectClass:[MYRequest class]
rootKeyPath:nil
method:RKRequestMethodPOST];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping
method:RKRequestMethodPOST
pathPattern:@"items"
keyPath:nil
statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[self.objectManager addRequestDescriptor:requestDescriptor];
[self.objectManager addResponseDescriptor:responseDescriptor];
MYRequest *body = [MYRequest new];
[body setProp1:@123];
[body setProp2:@5];
[self.objectManager postObject:body
path:@"items"
parameters:nil
success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
MYResponse *result = [mappingResult firstObject];
NSLog(@"Data: %@\nMessage: %@", [result data], [result message]);
}
failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
关于ios - 使用未映射到 POST 对象的 RestKit 处理 POST 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18265461/
请看一下我的代码。 int main () { Program* allcommand = new Program; allcommand->addCommand("add", new
因此,当我遇到调试断言时,我正在编写代码。现在我很想知道为什么这段代码不起作用: for(Model::MeshMap::iterator it = obj1->GetMeshes().begin()
这是我上一个问题的延续 Group, Sum byType then get diff using Java streams . 按照建议,我应该作为单独的线程发布,而不是更新原始线程。 因此,通过我
我正在实现一些非常适合 map 的代码。但是,我要迭代的列表中有大量对象,所以我的问题是哪种方法是解决此问题的最佳方法: var stuff = $.map(listOfMyObjects, some
我正在尝试创建一个包含不同类的成员函数指针的映射。成员函数都具有相同的签名。为了做到这一点,我所有的类都继承了一个 Object 类,它只有默认构造函数、虚拟析构函数和一个虚拟 ToString()
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: how do you make a heterogeneous boost::map? 有可能在 C++ 中
我有一个 Mysql 查询,请检查以下内容: SELECT `tbl_classSubjects`.`classID` , `tbl_classSubjects`.`sectionID` , `tbl
抱歉,这可能是一个基本问题。 JNA直接映射和接口(interface)映射有什么区别? 我的解释是否正确: 直接映射 : 直接使用库对象(如 Java 中的静态 main) 接口(interface
在 Twitter's Scala school collections section ,它们显示了一个带有偏函数作为值的 Map: // timesTwo() was defined earlie
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
据我了解,从 scala stdlib 声明一个映射并没有将其专门用于原始类型。我要的不是付出装箱/拆箱的代价,而是同时拥有scala map 的接口(interface)。一个明显的选择是使用 tr
如何为这样的 JSON 响应创建对象映射,它只是一个整数数组: [ 565195, 565309, 565261, 565515, 565292, 565281, 566346, 5
是否可以为 DTO 对象创建映射然后查询它们 而不是域?如果不解释为什么? 如果我需要几个 dtos 怎么办? DTos 是只读的 ID 由 NH 自动生成 将来这些 dtos 将设置映射到链接的 d
我有一个返回的函数(常规代码) [words: "one two", row: 23, col: 45] 在 Scala 中,我将上面更改为 Scala Map,但随后我被迫将其声明为 Map[Str
我有一组与 Vanilla 磅蛋糕烘焙相关的数据(200 行),具有 27 个特征,如下所示。标签caketaste是衡量烤蛋糕的好坏程度,由 bad(0) 定义, neutral(1) , good
我有试图映射到新代码的遗留代码。 OLD_PERSON pid sid name age NEW_PERSON pid sid fid age RESOLVE_PERSON pid fid statu
我有一个表,其中一个字段可以指向其他 3 个表之一中的外键,具体取决于鉴别器值是什么(Project、TimeKeep 或 CostCenter。通常这是用子类实现的,我想知道我有什么 注意子类名称与
我有一个类型 [ST s (Int, [Int])] 的绑定(bind)我正在尝试申请runST使用映射到每个元素,如下所示: name :: [ST s (Int, [Int])] --Of Cou
在我正在进行的项目中,我有以下实体:分析师、客户 和承包商。每个都继承自基类 User。 public abstract class User { public virtual int Id
我想知道是否可以在 Vim 中创建一个映射(对于普通模式),允许用户在映射执行之前输入。 我想为我最常用的 grep 命令创建一个快捷方式的映射。我希望命令允许输入我正在搜索的内容,然后在输入时执行。
我是一名优秀的程序员,十分优秀!