3

RESTKIT に問題があり、RESTKit .20.1 を介して次の JSON をマッピングしています。ネストされた JSON 配列があり、RelationshipMapper を介してマップしようとしています。5 つの chart_data オブジェクトを正常にマップできますが、関連するネストされた chart_datatum オブジェクトが ChartDataDetails クラスにマップされません。すべてのプロパティが空白です。

以下のオブジェクト構造を希望します。

アラート インスタンス

      ChartData オブジェクトの配列

          各 ChartData オブジェクトには 1 つの ChartDataDetails オブジェクトが含まれている必要があります <---- このオブジェクトは空白です

現在の状態の XCode Debugger のスクリーンショットについては、下部のリンクを参照してください。

誰か助けてください。

ありがとう、G

{
    "alert_instance": {
    "alert_template_id": 1,
    "alert_time_period": "2013-05-29",
    "chart_data": [
        {
            "chart_datum": {
                "alert_instance_id": 1,
                "chart_data_id": 1,
                "chart_data_name": "provider_id",
                "datatype": 1,
                "chart_data_value": "1"
            }
        },
        {
            "chart_datum": {
                "alert_instance_id": 1,
                "chart_data_id": 1,
                "chart_data_name": "Provider_name",
                "datatype": 2,
                "chart_data_value": "Stubbs, Drew"
            }
        },
        {
            "chart_datum": {
                "alert_instance_id": 1,
                "chart_data_id": 1,
                "chart_data_name": "Posting_date",
                "datatype": 3,
                "chart_data_value": "05/12/2013"
            }
        },
        {
            "chart_datum": {
                "alert_instance_id": 1,
                "chart_data_id": 1,
                "chart_data_name": "Charges",
                "datatype": 5,
                "chart_data_value": "229"
            }
        },
        {
            "chart_datum": {
                "alert_instance_id": 1,
                "chart_data_id": 1,
                "chart_data_name": "Payments",
                "datatype": 5,
                "chart_data_value": "-1023.11"
            }
        }
    ]
}

モデルクラス

AlertInstance.h

@interface AlertInstance : NSObject

@property  (nonatomic, copy) NSNumber* alertTemplateId;
@property  (nonatomic, copy) NSDate* alertTimePeriod;
@property  (nonatomic, retain) NSMutableArray* chartData;

@end

ChartData.h

@interface ChartData : NSObject

@property  (nonatomic, retain) ChartDataDetails *chartDataDetails;

@end

ChartDataDetails.h

@interface ChartDataDetails : NSObject

@property  (nonatomic, copy) NSNumber* chartDataId;
@property  (nonatomic, copy) NSString* chartDataName;
@property  (nonatomic, copy) NSNumber* chartDataType;
@property  (nonatomic, copy) NSNumber* chartDataValue;

@end

マッピングのコード..

RKObjectMapping* chartDataDetailMapping = [RKObjectMapping mappingForClass:[ChartDataDetails class]];

[chartDataDetailMapping addAttributeMappingsFromDictionary:@{
     @"chart_data_id": @"chartDataId",
     @"chart_data_name": @"chartDataName",
     @"datatype": @"chartDataType",
     @"chart_data_value": @"chartDataValue",
 }];

RKObjectMapping* chartDataMapping = [RKObjectMapping mappingForClass:[ChartData class]];
[chartDataMapping addAttributeMappingsFromDictionary:@{
     @"chart_data":@"chartData"}];

RKObjectMapping* alertInstanceMapping = [RKObjectMapping mappingForClass:[AlertInstance class]];
[alertInstanceMapping addAttributeMappingsFromDictionary:@{
     @"alert_template_id": @"alertTemplateId",
     @"alert_time_period": @"alertTimePeriod",
 }];

[alertInstanceMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"chart_data"
                                                                                    toKeyPath:@"chartData"
                                                                                 withMapping:chartDataMapping]];

[alertInstanceMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"chart_datum"
                                                                                      toKeyPath:@"chartDataDetails"
                                                                                     withMapping:chartDataDetailMapping]];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:alertInstanceMapping
                                                                                   pathPattern:nil
                                                                                       keyPath:@"alert_instance"
                                                                                   statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];

NSURL *URL = [NSURL URLWithString:@"http://ideainnovationsmobiledev1.cloudapp.net:3000/alert_instances/1.json"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
RKObjectRequestOperation *objectRequestOperation = [[RKObjectRequestOperation alloc] initWithRequest:request responseDescriptors:@[ responseDescriptor ]];

[objectRequestOperation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 

デバッガーのスクリーンショットへのリンク

https://docs.google.com/file/d/0Bwaj6O1rXiKaeFIwT2s4Rm1Gb00/edit?usp=sharing

編集:

わかりました。

次のように、ChartDetailsMapping を ChartData にチェーンする必要がありました。

[chartDataMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"chart_datum"
                                                                                 toKeyPath:@"chartDataDetails"
                                                                                 withMapping:chartDataDetailMapping]];

[alertInstanceMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"chart_data"
                                                                                     toKeyPath:@"chartData"
                                                                                   withMapping:chartDataMapping]];
4

0 に答える 0