【发布时间】:2023-04-08 15:21:01
【问题描述】:
我将尝试解释我希望如何完成映射:
TOP lvl json 对象包含 Players 对象,它是 Player 对象的数组
每个Player 对象都包含一个数组,我希望数组中的每个对象都属于Event 对象(自定义对象)。
现在,由于我有 Player 对象的映射并且我正在填充数组,而不是 Event 对象(这是我想要的),我得到了 NSDictionary 对象。问题是我确实有我的Event 类的映射。我的问题是让 RestKit 将它们映射到数组中。
我尝试添加 Event 类的 responseDescriptors,但我没有运气。
这里是Player对象映射
RKObjectMapping* playerMapping = [RKObjectMapping mappingForClass:[Player class]];
[playerMapping addAttributeMappingsFromDictionary:@{
...more here
@"activeEvents" : @"activeEvents"
}];
这里是请求方法
NSURL *taskURL = [NSURL URLWithString:kAppWebApiURLPath];
// Set object manager with base url
RKObjectManager *objectManager = [RKObjectManager sharedManager];
objectManager = [RKObjectManager managerWithBaseURL:taskURL];
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;
[objectManager.HTTPClient setDefaultHeader:@"Authorization" value:kAppWebAPIKey];
[objectManager.HTTPClient setDefaultHeader:@"Content-Type" value:@"application/json"];
RKRequestDescriptor * requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:[MappingProvider inverseLoginMapping] objectClass:[LoginInfo class] rootKeyPath:nil method:RKRequestMethodPOST];
[objectManager addRequestDescriptor:requestDescriptor];
RKResponseDescriptor *playersResponseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[MappingProvider playerMapping] method:RKRequestMethodGET pathPattern:nil keyPath:@"players" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:playersResponseDescriptor];
NSLog(@"%@",loginInfo.iOSDeviceToken);
[objectManager postObject:loginInfo path:kAppWebApiLoginPath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult)
{}...
更新,我现在需要更进一步的映射,我的播放器对象包含我使用成功映射的事件数组
[playerMapping addRelationshipMappingWithSourceKeyPath:@"activeEvents" mapping:[MappingProvider eventMapping]];
然而现在每个 Event 对象都包含一个 Player 数组,所以它就像 Players -> Events -> Players。
这是 Event 和 Player 对象的映射:
RKObjectMapping* eventMapping = [RKObjectMapping mappingForClass:[Event class]];
[eventMapping addAttributeMappingsFromDictionary:@{
@"stuffhere" : @"stuffz"
}];
RKObjectMapping* playerMapping = [RKObjectMapping mappingForClass:[Player class]];
[playerMapping addAttributeMappingsFromDictionary:@{
@"name": @"name",
@"activeEvents" : @"activeEvents"
}];
[eventMapping addRelationshipMappingWithSourceKeyPath:@"activeEvents/players" mapping:playerMapping];
现在我没有得到递归函数,但是我如何在代码中声明以建立这种关系 json 数组的映射以分配给我的本地数组属性?
【问题讨论】:
标签: ios objective-c mapping restkit restkit-0.20