我最近从 TBXML 切换到 RaptureXML,尽管提取信息要容易得多,但当我点击包含我的 xml 表格 View 的选项卡栏按钮时,会有明显的延迟。
在我的 viewDidLoad 方法中,我有以下内容“
events = [[NSMutableArray alloc] init];
[self loadURL];
我的 loadURL 方法如下:
- (void)loadURL {
RXMLElement *rootXML = [RXMLElement elementFromURL:[NSURL URLWithString:@"http://api.somexml.com/xml"]];
[rootXML iterateWithRootXPath:@"//event" usingBlock:^(RXMLElement *event) {
[events addObject:[NSArray arrayWithObjects:
[event attribute:@"uri"],
[event attribute:@"displayName"],
[event attribute:@"type"],
nil]];
}];
[rootXML iterateWithRootXPath:@"//location" usingBlock: ^(RXMLElement *location) {
[events addObject:[NSArray arrayWithObjects:
[location attribute:@"city"],
[location attribute:@"lat"],
[location attribute:@"lng"],
nil]];
}];
[rootXML iterateWithRootXPath:@"//start" usingBlock:^(RXMLElement *start) {
[events addObject:[NSArray arrayWithObjects:
[start attribute:@"time"],
[start attribute:@"date"],
nil]];
}];
}
我可以做些什么来加快速度吗?此外,当我将我的行数分配为 [events count] 时,我得到了 19 行,而我应该只得到 6 行。请帮忙。
最佳答案
蒂尔走在正确的轨道上。您需要在后台线程上进行解析。执行如下操作:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[self loadURL];
dispatch_async(dispatch_get_main_queue(), ^{
[tableView reloadData];
});
});
您会注意到我正在主线程上重新加载 TableView 。在后台线程上更新界面元素有点禁忌。
关于iphone - RaptureXML 有点慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10370153/