gpt4 book ai didi

iphone - IOS - RESTKIT - 多种方式映射结果

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:24:08 26 4
gpt4 key购买 nike

我是 ios/RESTKIT 的新手。我正在尝试使用 RESTKIT 从 ios 设备使用 web 服务。 json 返回可能有 2 种可能的结果。

A)失败时,json 结果如下所示(结果是一个字符串“null”。错误代码可用):

{
status: false,
result: null
error: NO_SUCH_USER
}

(A) 的映射

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[WsReturn class]];
[mapping mapKeyPath:@"result" toAttribute:@"result"];
[mapping mapKeyPath:@"status" toAttribute:@"status"];
[mapping mapKeyPath:@"error" toAttribute:@"error"];
[objectManager.mappingProvider setMapping:mapping forKeyPath:@"/"];

B)成功时,它看起来像(结果是一个“复杂对象”。错误代码为空):

{
status: true,
result: {
name: "Some User",
tasks: [
{
name: "Some Task1",
taskId: 10
},
{
name: "Some Task2",
taskId: 20
}
]
},
error: null
}

(B) 的映射

RKObjectMapping* taskMapping = [RKObjectMapping mappingForClass:[Task class]];
[taskMapping mapKeyPath:@"name" toAttribute:@"name"];
[taskMapping mapKeyPath:@"taskId" toAttribute:@"taskId"];
[objectManager.mappingProvider setMapping:taskMapping forKeyPath:@"tasks"];

RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[Result class]];
[resultMapping mapKeyPath:@"name" toAttribute:@"name"];
[resultMapping mapRelationship:@"tasks" withMapping:taskMapping];
[objectManager.mappingProvider setMapping:resultMapping forKeyPath:@"result"];

RKObjectMapping* cmplxMapng = [RKObjectMapping mappingForClass:[WsReturn class]];
[cmplxMapng mapKeyPath:@"status" toAttribute:@"status"];
[cmplxMapng mapKeyPath:@"error" toAttribute:@"error"];
[cmplxMapng mapRelationship:@"result" withMapping:resultMapping];
[objectManager.mappingProvider setMapping:cmplxMapng forKeyPath:@"/"];

问题

1) (A) 工作正常。 (乙) 没有。你能提供一些指导吗?

2) 对于相同的网络服务调用,“结果”部分可以是字符串(null)或复杂对象。那么我该如何在代码中处理呢?我传递哪个映射?映射或 cmplxMappng(更改名称以避免水平滚动)?

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/myUrl"
objectMapping:HOW_TO_DECIDE_WHICH_MAPPING_TO_PASS_HERE delegate:self];

我相信这是一个常见的场景。我搜索过,但找不到相关示例。也许我看错地方了。关于如何处理此问题的想法/指示会有所帮助。谢谢。

最佳答案

我就是这样解决的-

1) 我替换了这一行:

[objectManager.mappingProvider setMapping:taskMapping forKeyPath:@"tasks"];    

有了这个:(KeyPath 的注意事项)

[objectManager.mappingProvider setMapping:uooMapping forKeyPath:@"result.tasks"]; 

2) 已关注此主题 http://groups.google.com/group/restkit/browse_thread/thread/89b25b3f0f7e0177 & 按照 Blake 的建议添加了这一行:

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.3]]; 

就在调用 loadObjectsAtResourcePath 之前

3) 至于以不同方式映射对象,我发现传递 cmplxMapng 似乎总是有效。

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/myUrl"     
objectMapping:cmplxMapng delegate:self];

因此,如果“结果”部分作为字符串“null”返回,我会得到“(null)”结果和“状态”和“错误”字段被正确映射。有效!

希望这对某人有帮助。

关于iphone - IOS - RESTKIT - 多种方式映射结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com