我有一个 XML 文件作为 url,其中文件包含这样的内容,
<Products>
<products id="1">
<name>product1</name>
<price>$150</price>
<img>http://www.myimage.com/Main_pic.png</img>
</products>
</Products>
现在使用 NSXMLParser 我可以检索数据和图像,但是在我获得这些数据后,我不明白如何存储在 NSMutableArray 或 NSDictionary 中。我还尝试从 Apple 的 Lazy Loading Table Images Asynchronous Downloading实现延迟加载异步图像下载。但我未能加载图像。我们有任何替代异步加载的方法吗?
请详细描述我,
- 如何在异步下载中存储从 url XML 文件中检索的数据。
- 如何分离数据和图像。
- 如何在 UIImage 和数据中实现这些以在 iPhone 中查看。
已编辑
为了更好地理解,我需要如下图所示的数据和图像,而不是在表格视图中。
EDITED-2 通过使用我根据我的内容修改的lazyloading解析here代码供您参考,
- (void)main{
self.workingArray = [NSMutableArray array];
self.workingPropertyString = [NSMutableString string];
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:dataToParse];
[parser setDelegate:self];
[parser parse];
if (![self isCancelled]){
self.completionHandler(self.workingArray);}
self.workingArray = nil;
self.workingPropertyString = nil;
self.dataToParse = nil;}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
if ([elementName isEqualToString:@"Products"]){
self.workingEntry = [[egsLists alloc] init];}
storingCharacterData = [elementsToParse containsObject:elementName];}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
if (self.workingEntry){
if (storingCharacterData){
NSString *trimmedString = [workingPropertyString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
[workingPropertyString setString:@""];
if ([elementName isEqualToString:sIDStr]){
self.workingEntry.ProductID = trimmedString;}
else if ([elementName isEqualToString:sImageStr]){
self.workingEntry.img = trimmedString;}}
else if ([elementName isEqualToString:@"Products"]){
[self.workingArray addObject:self.workingEntry];
self.workingEntry = nil;}}}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
if (storingCharacterData){
[workingPropertyString appendString:string];}}