【发布时间】:2009-07-16 09:41:32
【问题描述】:
我正在构建一个应用程序,它将读取 rss 提要并将它们呈现在 UITableViews 中。我在谷歌上搜索,在这里,我决定使用 LibXML。
当我的应用程序启动时,它会检查它是否具有有效的互联网连接,并抓取一个 rss 提要,我从中提取一些数据并使用 tableViews 创建一个 uiTabBar。在解析第一个 rss 提要并构建 UITabBar 之后,对于我的 uiTabBar 中的每个按钮,我都有不同的 rss 提要(类别)。当我有良好的互联网连接 (wifi) 甚至 3G 时,我的应用程序运行得非常好,但是当互联网连接受到影响时,我的应用程序也会这样做。
因为我一个接一个地解析所有提要,并且在主线程中 GUI 停止响应,这是一个问题。
我使用 LibXML 来解析我的提要,我这样做:
CXMLDocument *rssParser = [[[CXMLDocument alloc] initWithContentsOfURL:url options:0 error:nil] autorelease];
NSArray *resultDate = NULL;
resultDate = [rssParser nodesForXPath:@"//channel" error:nil];
for(CXMLElement *date in resultDate)
{
NSString *data = (NSString *)[[date childAtIndex:12] stringValue];
[self setLastBuildDate:[[self parseDate:data] copy]];
break;
}
NSArray *resultNodes = NULL;
resultNodes = [rssParser nodesForXPath:@"//item" error:nil];
for(CXMLElement *resultElement in resultNodes)
{
NSMutableDictionary *feed = [[NSMutableDictionary alloc] init];
int counter;
for(counter = 0; counter < [resultElement childCount]; counter++)
{
[feed setObject:[[resultElement childAtIndex:counter] stringValue] forKey:[[resultElement childAtIndex:counter] name]];
}
[links addObject:[feed objectForKey:@"link"]];
[feedsList addObject:[feed copy]];
[feed release];
}
[newsTable reloadData];
当我按下 uitabbar 上的按钮时,我尝试仅解析第一个按钮和其他按钮的提要,但我无法调用在 -didselectitem 事件上抓取和解析提要的函数。
现在我正在考虑在另一个线程中解析它们而不是在主线程中..有人可以给我一些指示吗?
提前谢谢你
【问题讨论】:
标签: iphone xml parsing asynchronous