我的 JSON 响应如下所示:
{
"enabled": false,
"number_of_articles": 20,
"new_users": [
{
"id": "5001",
"name": "Jimmy Valner"
},
],
"articles" : [
{
"id" : 33122,
"title" : "Something",
"authors": [
{
"id": "511",
"name": "Somebody"
},
{
"id": "51",
"name": "Somebody else"
}
}]
}
我知道,这并不是一个真正合适的 RESTful 响应。但我必须以某种方式将其映射到两个不同的实体(用户和文章)。A 已经有文章部分的工作代码。它将文章和文章映射为关系。我这样做是这样的:
RKMapping *mapping = [MappingProvider articlesMapping];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor
responseDescriptorWithMapping:mapping
pathPattern:@"/articles/:userId/latest"
keyPath:@"articles"
statusCodes:statusCodeSet];
NSURLRequest *request = [[RKObjectManager sharedManager] requestWithObject:nil
method:RKRequestMethodGET
path:[NSString stringWithFormat:@"/articles/%@/latest", [[CredentialStore sharedInstance] userId]]
parameters:nil];
RKManagedObjectStore *store = [[DataModel sharedDataModel] objectStore];
RKManagedObjectRequestOperation *operation = [[RKManagedObjectRequestOperation alloc] initWithRequest:request
responseDescriptors:@[responseDescriptor]];
operation.managedObjectCache = store.managedObjectCache;
operation.managedObjectContext = store.mainQueueManagedObjectContext;
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
NSLog(@"%@", mappingResult.array);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"ERROR: %@", error);
NSLog(@"Response: %@", operation.HTTPRequestOperation.responseString);
}];
[operation start];
这按预期工作。我在方法中提供了映射说明+ (RKMapping *)articlesMapping
。甚至 JSON 响应的作者部分也被正确映射。
现在我想将new_users
数组映射到不同的实体(显然是用户)。如何通过不向服务器调用另一个请求来做到这一点?我在创建另一个方面取得了一些成功,RKManagedObjectRequestOperation *operation
但这当然会触发另一个我想避免的对服务器的网络请求。我应该在这里寻找解决方案,RKObjectManager
还是应该以某种方式将 keyPath 更改为从根级别开始,并为+ (RKMapping *)
方法中的不同实体进行映射(可能不是)?
还有一个问题 .. 我如何从这个 JSON 访问enabled
,number_of_articles
属性?同样,我不是在处理一个结构良好的 Restful 响应,但我必须以某种方式处理它。我只想以某种方式访问这些属性……不需要映射到实体。