ios - RestKit 用数组解析 atom XML
<p><p>我正在尝试使用 RestKit (0.23.1) 来解析一些 Atom XML,如下所示:</p>
<pre><code><feed xmlns="http://www.w3.org/2005/Atom" xmlns:ex="http://my.library.com">
<entry>
<title>Title 1</title>
<link href="http://localhost:2001/1" />
<id>urn:uuid:a6e04980-e273-11e3-8b68-0800200c9a66</id>
<updated>2013-12-21T18:30:02Z</updated>
<summary>Summary 1</summary>
<ex:thing>
<ex:name>Thing 1</ex:name>
</ex:thing>
<ex:thing>
<ex:name>Thing 2</ex:name>
</ex:thing>
</entry>
</feed>
</code></pre>
<p>我正在使用对象映射器将馈送映射到两个对象。第一个对象表示提要中的一个条目,其中包含一组事物。</p>
<pre><code>@interface Entry : NSObject
@property NSString *title;
@property NSString *summary;
@property NSMutableArray *things;
@end
</code></pre>
<p>NSMutableArray 是包含事物的集合。 </p>
<pre><code>@interface Thing : NSObject
@property NSString *name;
@end
</code></pre>
<p>最后,将这一切粘合在一起的 RestKit 代码在这里:</p>
<pre><code>- (void) parseAtomThings {
forMIMEType:@"application/atom+xml"];
RKObjectMapping *entryMapping = ];
[entryMapping addAttributeMappingsFromDictionary:@{
@"title.text" : @"title",
@"summary.text" : @"summary"
}];
RKObjectMapping *thingMapping = ];
[thingMapping addAttributeMappingsFromDictionary:@{
@"name.text" : @"name"
}];
// TODO - how do I get this to map to ex:thing?
;
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:entryMapping method:RKRequestMethodGET pathPattern:nil
keyPath:@"feed.entry" statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
NSURLRequest *request = ];
RKObjectRequestOperation *operation = [ initWithRequest:request responseDescriptors:@];
[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *result) {
for(Entry *entry in ) {
NSLog(@"%@", entry.description);
}
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
NSLog(@"Failed with error: %@", );
}];
;
}
</code></pre>
<p>在执行时,Entry 对象的标题和摘要属性会被填充。然而,事物的 NSMutableArray 没有被填充并且是 nil。</p>
<p>我确定我正在寻找的魔法就在这条线上:</p>
<pre><code>;
</code></pre>
<p>但我不知道如何正确地将映射列表指定到 Entry 类的 thing 属性。</p>
<p>日志在这里:</p>
<pre><code>2014-05-23 23:06:05.457 TestApp D restkit.object_mapping:RKMappingOperation.m:859 Starting mapping operation...
2014-05-23 23:06:05.457 TestApp T restkit.object_mapping:RKMappingOperation.m:860 Performing mapping operation: <RKMappingOperation 0xbe3b4b0> for 'Entry' object. Mapping values from object {
"ex:thing" = (
{
"ex:name" = {
text = "Thing 1";
};
text = "";
},
{
"ex:name" = {
text = "Thing 2";
};
text = "";
}
);
id = {
text = "urn:uuid:a6e04980-e273-11e3-8b68-0800200c9a66";
};
link = {
href = "http://localhost:2001/1";
text = "";
};
summary = {
text = "Summary 1";
};
text = "";
title = {
text = "Title 1";
};
updated = {
text = "2013-12-21T18:30:02Z";
};
} to object <Entry: 0xbe39e00> with object mapping (null)
2014-05-23 23:06:05.458 TestApp D restkit.object_mapping:RKMappingOperation.m:728 Did not find mappable relationship value keyPath 'thing'
2014-05-23 23:06:05.459 TestApp T restkit.object_mapping:RKMappingOperation.m:438 Found transformable value at keyPath 'summary.text'. Transforming from class '__NSCFString' to 'NSString'
2014-05-23 23:06:05.459 TestApp T restkit.object_mapping:RKMappingOperation.m:453 Mapping attribute value keyPath 'summary.text' to 'summary'
2014-05-23 23:06:05.459 TestApp T restkit.object_mapping:RKMappingOperation.m:469 Mapped attribute value from keyPath 'summary.text' to 'summary'. Value: Summary 1
2014-05-23 23:06:05.459 TestApp D restkit.object_mapping:RKPropertyInspector.m:131 Cached property inspection for Class 'Entry': {
summary = {
isPrimitive = 0;
keyValueCodingClass = NSString;
name = summary;
};
things = {
isPrimitive = 0;
keyValueCodingClass = NSMutableArray;
name = things;
};
title = {
isPrimitive = 0;
keyValueCodingClass = NSString;
name = title;
};
}
2014-05-23 23:06:05.460 TestApp T restkit.object_mapping:RKMappingOperation.m:438 Found transformable value at keyPath 'title.text'. Transforming from class '__NSCFString' to 'NSString'
2014-05-23 23:06:05.460 TestApp T restkit.object_mapping:RKMappingOperation.m:453 Mapping attribute value keyPath 'title.text' to 'title'
2014-05-23 23:06:05.461 TestApp T restkit.object_mapping:RKMappingOperation.m:469 Mapped attribute value from keyPath 'title.text' to 'title'. Value: Title 1
2014-05-23 23:06:05.461 TestApp D restkit.object_mapping:RKMappingOperation.m:928 Finished mapping operation successfully...
2014-05-23 23:06:05.461 TestApp D restkit.object_mapping:RKMapperOperation.m:403 Finished performing object mapping. Results: {
"feed.entry" = "<Entry: 0xbe39e00>";
}
</code></pre>
<p>日志清楚地表明:</p>
<pre><code>014-05-23 23:06:05.458 TestApp D restkit.object_mapping:RKMappingOperation.m:728 Did not find mappable relationship value keyPath 'thing'
</code></pre>
<p>我猜我只见树木不见森林,错过了一些非常明显的东西。非常感谢任何帮助。</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您的关键路径中缺少 <code>ex:</code>。</p>
<p>为此,您需要创建一个关系映射并添加它(使用 <code>relationshipMappingFromKeyPath:toKeyPath:withMapping:</code>),而不是使用方便的方法 <code>addRelationshipMappingWithSourceKeyPath:mapping:</code>(因为源路径和目标路径不同)。</p>
<p>同样的问题延伸到您需要将 <code>@"name.text"</code> 更改为 <code>@"ex:name.text"</code> 的名称。</p></p>
<p style="font-size: 20px;">关于ios - RestKit 用数组解析 atom XML,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/23839028/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/23839028/
</a>
</p>
页:
[1]