objective-c - RestKit RKObjectMapping 嵌套 json

标签 objective-c ios restkit

如何使用 RestKit RKObjectMapping 映射下面嵌套的 json?我只需要映射“数据”。我当前的下面代码返回 (null) - 谢谢!

{

    "sucess": true,
    "error": {
        "code": "",
        "message": ""
    },
    "data": [
        {
            "id": 1,
            "name": "Salad",
            "description": "Salad Desc",
            "category_id": 1
        },
        {
            "id": 2,
            "name": "Soup",
            "description": "Soup Desc",
            "category_id": 1
        },
        {
            "id": 3,
            "name": "Wrap",
            "description": "Wrap Desc",
            "category_id": 1
        },
        {
            "id": 4,
            "name": "Appetizers",
            "description": "Appetizers Desc",
            "category_id": 1
        }
    ]

} 

@interface Subcategory : NSObject    
    @property (nonatomic, retain) NSNumber *subcategoryID;
    @property (nonatomic, retain) NSNumber *categoryID;
    @property (nonatomic, retain) NSString *name;
    @property (nonatomic, retain) NSString *description;
    @property (nonatomic, retain) NSString *thumbnail;
    @property (nonatomic, retain) NSArray *data;

View Controller

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[Subcategory class]];

RKObjectMapping* dataMapping = [RKObjectMapping mappingForClass:[Subcategory class]];
[dataMapping mapKeyPath:@"id" toAttribute:@"subcategoryID"];
[dataMapping mapKeyPath:@"category_id" toAttribute:@"categoryID"];
[dataMapping mapAttributes:@"name", @"description", nil];

[mapping mapKeyPath:@"data" toRelationship:@"data" withMapping:dataMapping];

[[RKObjectManager sharedManager] loadObjectsAtResourcePath:[NSString stringWith

最佳答案

您缺少 rootKeyPath 并且还在提供程序中设置了映射:

RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[Subcategory class]];    
RKObjectMapping* dataMapping = [RKObjectMapping mappingForClass:[Subcategory class]];
[dataMapping mapKeyPath:@"id" toAttribute:@"subcategoryID"];
[dataMapping mapKeyPath:@"category_id" toAttribute:@"categoryID"];
[dataMapping mapAttributes:@"name", @"description", nil];
dataMapping.rootKeyPath = @"data"; //this is what you were missing    
//get your  mapping provider (i'm not sure if you already have on declared)
[mappingProvider setObjectMapping:dataMapping forResourcePathPattern:@"/somepath/toservice/"];
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/somepath/toservice/"];

这里有更多信息可以回答您有关获取其他元素(例如“错误”)的问题:

- (void)objectLoader:(RKObjectLoader *)objectLoader didFailWithError:(NSError *)error {
    NSError *parseError = nil;
    id response = [objectLoader.response parsedBody:&parseError];
    DLog(@"response %@", response);    
    if (!parseError) {
        NSString *errorMessage = [[response valueForKey:@"error"] valueForKey:@"message"];     
        //do something with it    
    }
}

关于objective-c - RestKit RKObjectMapping 嵌套 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167486/

相关文章:

ios - 如何发送带有附件的GTLRGmail_Message

ios - Objective-C ,iOS 7 - CLLocationManager : didUpdateLocations is being called only once

ios - Swift Alamofire 映射器

iphone - 加载新 View

objective-c - AVAudioSessionCategoryPlayAndRecord 使 AirPlay 不可见

objective-c - 如何在 restkit 0.20 中将 NSManagedObject 序列化为 JSON?

ios - 在 App Delegate 中调用 IBAction

objective-c - UICollectionViewCell 已隐藏,但我从未将其设置为隐藏

ios - RestKit 和 CocoaPods 的 Xcode 7 链接器错误

ios - 当 RKEntityMapping 包含在同一个 JSON 中时如何添加连接