gpt4 book ai didi

ios - 使用 RestKit 对象映射空响应

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:16:22 26 4
gpt4 key购买 nike

感谢 help here在 RestKit 邮件列表上,我已经能够解析我的 JSON,但现在我遇到了一个新问题,解析一个空响应。下面是我的查询有结果时 JSON 的样子:

    {"blobsList":
{"blobs":
[
{"createdOn":"2012-03-16T15:13:12.551Z","description":"Fake description ","hint":"And a useless hint","id":400,"name":"Fake CA one","publicId":"FF6","type":0},

{"createdOn":"2012-03-16T17:33:48.514Z","description":"No hint on this one, but it does have a description.","hint":"Hint","id":402,"name":"Second fake one in CA","publicId":"FF8","type":0}
]}}

所以我将其添加到我的映射中:

        RKObjectMapping* blobsListMapping = [RKObjectMapping mappingForClass:[GetResponseInRegionResponseList class]];
[blobsListMapping mapKeyPath:@"blobsList" toAttribute:@"blobsList"];

[[RKObjectManager sharedManager].mappingProvider setMapping:blobMapping forKeyPath:@"blobsList.blobs"];

[[RKObjectManager sharedManager].mappingProvider setMapping:blobsListMapping forKeyPath:@"blobsList"];

我的类(class)是:

        @interface GetResponseInRegionResponse : NSObject
{
NSString* name;
NSString* blobId;
NSString* description;
NSString* hint;
}


@interface GetResponseInRegionResponseList : NSObject
{
NSArray  *blobsList;
}

但现在问题是我的服务器也可以为 JSON 返回这个:

        {"blobsList":""} 

是的,如果查询没有结果,我会返回。它使我的应用程序崩溃

        restkit.object_mapping:RKObjectMapper.m:255 Performing object mapping sourceObject: {
    blobsList = "";
}
 and targetObject: (null)

2012-03-22 11:56:16.233 Ferret[7399:17a07] T restkit.object_mapping:RKObjectMapper.m:269 Examining keyPath 'blobs' for mappable content...
2012-03-22 11:56:16.233 Ferret[7399:17a07] D restkit.object_mapping:RKObjectMapper.m:279 Found unmappable value at keyPath: blobs
2012-03-22 11:56:16.233 Ferret[7399:17a07] T restkit.object_mapping:RKObjectMapper.m:269 Examining keyPath 'blobsList.blobs' for mappable content...
2012-03-22 11:56:16.239 Ferret[7399:17a07] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFConstantString 0xdb1d0> valueForUndefinedKey:]: this class is not key value coding-compliant for the key blobs.'

所以我试图想出一种方法让 ResKit 映射这个空响应。我已经尝试了所有这些:

[[RKObjectManager sharedManager].mappingProvider setMapping:blobListMapping forKeyPath:@"blobsList"];
[[RKObjectManager sharedManager].mappingProvider setMapping:NULL forKeyPath:@"blobsList"];
[blobListMapping mapKeyPath:@"" toAttribute:@"blobsList"];
[blobListMapping mapKeyPath:@"blobsList" toAttribute:@"blobsList"];

但是他们都崩溃了。我正在尝试制作源代码的正面和反面,“此类不是关键 blob 的键值编码兼容”令人费解,因为那里没有任何 blob,只有 blobsList。感谢您的帮助,谢谢!

最佳答案

我在我的项目中遇到了类似的事情。我正在发布到一个网络服务,该服务将我发布的对象返回给我,该对象包装在一个数组中。这导致 RestKit 在解析时崩溃,因为它期望只返回一个对象而不是一个集合。为了解决这个问题,我实现了 objectLoader:willMapData: delegate 方法并将响应对象从数组中拉出并通过 RestKit 解析发送该对象,一切都很好。

也许您可以做类似的事情。检查您是否在 blobslist 中取回了一个字符串并将其转换为一个空数组,然后再通过 RestKit 解析发送它。

- (void)objectLoader:(RKObjectLoader *)objectLoader willMapData:(id *)mappableData
{
// Horrible hack to convert posted object that gets returned as an array into a single object
// that can be mapped.
//
if ([objectLoader.targetObject isKindOfClass:[TSLPostPostContract class]])
{
if ([*mappableData isKindOfClass:[NSArray class]])
{
*mappableData = [*mappableData objectAtIndex:0];
}
}
}

关于ios - 使用 RestKit 对象映射空响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9826310/

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