感谢在这里帮忙 https://stackoverflow.com/questions/9743155/restkit-mapping-with-an-array-of-complex-objects在 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"];
我的课程是:
@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。我感谢任何帮助,谢谢!