如何使用 RaptureXML 和 AFNetworking 在 UITableView 上动态显示 XML 的解析内容?
Posted
技术标签:
【中文标题】如何使用 RaptureXML 和 AFNetworking 在 UITableView 上动态显示 XML 的解析内容?【英文标题】:How to dynamically display parsed contents of XML on UITableView using RaptureXML and AFNetworking? 【发布时间】:2013-04-19 14:17:07 【问题描述】:我正在使用RaptureXML
和包装器AFRaptureXMLRequestOperation
,它集成了AFNetworking
和RaptureXML
。
下面的代码运行良好。一切正常,下载、解析和显示UITableView
中的内容。
当我在后台进行下载和解析时,我更新了Main Thread
上的UITableView
,异步。
唯一的问题是 UITableView 的内容只有在 XML 的所有元素都被解析并插入到适当的NSMutableArrays
之后才会显示,这有时需要一段时间。
我的问题:
有没有办法动态地显示UITableView
的内容,同时它们正在被下载和解析并且NSMutableArrays
正在被数据填充,例如使用来自 Twitter 的 JASON
文件的示例?
有代码:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
[self downloadParsePlayListXML];
dispatch_async(dispatch_get_main_queue(), ^
[self.tableView reloadData];
);
);
- (void)downloadParsePlayListXML
NSString *url = @"http://example.net/playlist/xmlfiles/playlist.xml";
AFRaptureXMLRequestOperation *operation = [AFRaptureXMLRequestOperation XMLParserRequestOperationWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:url]] success:^(NSURLRequest *request, NSHTTPURLResponse *response, RXMLElement *XMLElement)
[XMLElement iterateWithRootXPath:@"//program" usingBlock: ^(RXMLElement *program)
[self.programs addObject:[program attribute:@"name"]];
[self.speakers addObject:[program child:@"speaker"].text];
];
failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, RXMLElement *XMLElement)
// Handle Error
];
[operation start];
非常感谢您的帮助!
【问题讨论】:
【参考方案1】:直到今天晚些时候我才能对此进行测试,但我会尝试一下。注意:我对 RaptureXML 不熟悉。
首先,请参阅几天前有关解析 XML 的这篇文章。 https://***.com/a/16047964/1710611
然后,在解析过程中,每次到达元素末尾时,您都会将其添加到数组中(作为UITableView
数据源)并刷新表格。
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
if ([elementName isEqualToString:@"YOURTAG"])
// finished getting the data in <YOURTAG>
// do something now that you've got your data retrieved
if (self.currentProperty)
[YOURDATASOURCEARRAY addObject:self.currentProperty];
[tableView reloadData];
或者,您也可以尝试将[tableView reloadData]
替换为:
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:YOURINDEXPATHARRAY withRowAnimation:YOURANIMATION];
[tableView endUpdates];
【讨论】:
谢谢 rog,我试试看结果告诉你:-) 祝你好运!如果有任何问题,我会在下午晚些时候尽我所能提供帮助。我没有考虑在它解析时动态更新它,所以我急于回家并在我的应用程序中尝试这个。 太棒了!如果愿意,请使用 RaptureXML、AFNetworking 和 AFRaptureXMLRequestOperation(Github 上提供的三个很棒的库)尝试上述代码。非常感谢! 抱歉,我没有早点回复你。我看到您现在已将答案标记为正确 - 那么您的问题解决了吗? 嘿,罗格,感谢您回复我。实际上解决方案很简单:我使用了你的代码,但首先我用一些虚拟数据填充了数组,然后我首先显示了 tableview。我没有显示,因为在第一时间数组计数为零。这不是最优雅的解决方案,但它正在工作。如果您偶然发现了更好的方法来做到这一点,请告诉我,好吗?非常感谢你帮助我:-)以上是关于如何使用 RaptureXML 和 AFNetworking 在 UITableView 上动态显示 XML 的解析内容?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中使用 NSDictionary 添加图像并使用 POST 方法将数组列表发送到服务器
使用 SDWebImage 而不是 AFNetworking 进行图像加载有很大的优势吗?
AFNetworking 中“setImageWithURLRequest:placeholderImage:success:”的 Alamofire 方式