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]];