Ios 为什么在尝试使用线程时必须添加sleep()?
我试图用一个线程解析一个XML文件。但是,XML很大,我在数组中存储了20000多个项目。我考虑使用一个线程来帮助解析器在加载表数据时解析XML文件。然而,使用线程似乎不起作用。我仍然需要插入两个睡眠,以使其工作一点 如何解析XML文件并同时将数据加载到tableview中Ios 为什么在尝试使用线程时必须添加sleep()?,ios,swift,xml,parsing,Ios,Swift,Xml,Parsing,我试图用一个线程解析一个XML文件。但是,XML很大,我在数组中存储了20000多个项目。我考虑使用一个线程来帮助解析器在加载表数据时解析XML文件。然而,使用线程似乎不起作用。我仍然需要插入两个睡眠,以使其工作一点 如何解析XML文件并同时将数据加载到tableview中 let hr115XMLParser = HR115XMLParser() let billXMLParser = BillXMLParser() var viewBillItems: [BillModel] = []
let hr115XMLParser = HR115XMLParser()
let billXMLParser = BillXMLParser()
var viewBillItems: [BillModel] = []
private var billItems: [BillModel]?
override func viewDidLoad() {
super.viewDidLoad()
DispatchQueue.global(qos: .userInteractive).async {
self.hr115XMLParser.parseFeed(url: "https://www.gpo.gov/smap/bulkdata/BILLSTATUS/115hr/sitemap.xml")
DispatchQueue.main.async {
self.fetchData()
self.tableView.reloadData()
}
}
}
private func fetchData()
{
sleep(20)
for index in 0..<self.hr115XMLParser.billItems.count {
print()
print("NEW ITEM \(index)")
print()
self.billXMLParser.parseFeed(url: self.hr115XMLParser.billItems[index])
sleep(5)
print(self.billXMLParser.billItemsArray[index].billtitle)
print(self.billXMLParser.billItemsArray[index].billfullName)
print(self.self.billXMLParser.billItemsArray[index].billURL)
print()
print("END ITEM")
print()
var newViewBillItem = BillModel()
newViewBillItem.billtitle = self.billXMLParser.billItemsArray[index].billtitle
newViewBillItem.billfullName = self.billXMLParser.billItemsArray[index].billfullName
newViewBillItem.billURL = self.billXMLParser.billItemsArray[index].billURL
self.viewBillItems.append(newViewBillItem)
}
}
parseFeed是一个异步函数,而不是另一个线程。这意味着将在parseFeed函数完成之前调用fetchData
为了避免这种情况,也许我不知道HR115XMLParser是否可以肯定地说可以使用闭包
self.hr115XMLParser.parseFeed(url: "https://www.gpo.gov/smap/bulkdata/BILLSTATUS/115hr/sitemap.xml") {
DispatchQueue.main.async {
self.fetchData()
self.tableView.reloadData()
}
}
不,不要使用睡眠。这是非常非常错误的。当然,您的XML解析器有一些委托方法,您可以实现这些方法来告诉您何时完成解析。什么是HR115XMLParser?@MartinR HR115XMLParser是一种XML解析器,它解析指向其他XML文件的链接,允许我从国会法案加载信息。尤其是标签。在不知道其API委托方法的情况下,回调?我们只能猜测如何正确使用该解析器。它来自哪里?有关于它用法的文档吗?@rmaddy有。我应该在这里用吗?我应该在哪里使用它?