応答 xml をオブジェクトにマップしようとすると、xml は次のようになります。
<list version="1.0">
<meta>
<type>resource-list</type>
</meta>
<resources start="0" count="168">
<resource classname="Quote">
<field name="name">Alpha</field>
<field name="price">10</field>
</resource>
<resource classname="Quote">
<field name="name">Beta</field>
<field name="price">9</field>
</resource>
</resources>
</list>
私が欲しいのはresources
パートです。オブジェクト モデルを作成します。
@interface Field : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSNumber *price;
@end
@interface Resources : NSObject
@property (nonatomic, strong) NSNumber *count;
@property (nonatomic, strong) NSArray *resource;
@end
resource
問題は次のとおりです。のマッピングを設定する方法がわかりませんResources
。私はかつてマッピングを使ってみました:
RKObjectMapping *objMapping = [RKObjectMapping mappingForClass:[Field class]];
[objMapping addAttributeMappingsFromArray:@[@"name",@"price"]];</br>
RKObjectMapping *resourcesMapping = [RKObjectMapping mappingForClass:[Resources class]];
[resourcesMapping addAttributeMappingsFromArray:@[@"count"]];
[resourcesMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"resource" toKeyPath:nil withMapping:objMapping]];
RKResponseDescriptor *descriptor = [RKResponseDescriptor responseDescriptorWithMapping:resourcesMapping method:RKRequestMethodGET pathPattern:@"XXXXXX" keyPath:@"list.resources" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
マッピングが完了すると、Resources
オブジェクトが作成されます。ただし、その配列resource
はまだ nil です。
xml でリソースの配列を取得するにはどうすればよいですか?
---更新済み-----
コードを更新しました。
RKObjectMapping *objMapping = [RKObjectMapping mappingForClass:[Field class]];
objMapping.forceCollectionMapping = YES;
[objMapping addAttributeMappingsFromDictionary:@{@"name":@"name.text"}];
また、respondscripter をキーパスで更新します。
RKResponseDescriptor *descriptor = [RKResponseDescriptor responseDescriptorWithMapping:objMapping method:RKRequestMethodGET pathPattern:@"XXXXX" keyPath:@"list.resources.resource.field" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
の成功ブロックでRKObjectManager
は、マッピング結果にフィールド配列があります。問題は、Field
のプロパティがすべてnil
です。
次のようなログを確認します。
D restkit.object_mapping:RKMapperOperation.m:229 Asked to map source object (
{
name = name;
text = "alpha";
},
{
name = price;
text = "98.3";
}
) with mapping name.text>"
)>
2014-05-14 23:33:57.681 RestKitTest[5138:3307] D restkit.object_mapping:RKMappingOperation.m:859 Starting mapping operation...
2014-05-14 23:33:57.682 RestKitTest[5138:3307] W restkit.object_mapping:RKMappingOperation.m:338 Destination object rejected attribute value (
name,
price
) for keyPath name.text. Skipping...
xmlの属性がマップソースオブジェクトの値になるようです。この種のオブジェクトを解析するように構成を設定するにはどうすればよいですか?