Понятия не имею, что здесь происходит, так как я следовал за другими ответами, которые используют это, включая Swift: синхронно выполнять код в фоновом режиме;queue.sync не работает, как я ожидал
У меня есть XMLParser, который мне нужен для загрузки 2 RSS-каналов.Чтобы предотвратить повторный вход, мне нужно загружать эти URL-адреса один за другим.Проблема в том, что мне нужно сделать это в фоновом / асинхронном режиме, чтобы он не зависал в пользовательском интерфейсе.
У меня есть следующее:
var myParser: XMLParser = XMLParser()
let parseQueue = DispatchQueue(label: "xmlQueue", attributes: [], target: nil)
var feeds = [RSS_FEED_URL_COT, RSS_FEED_URL] //this order
self.parseQueue.async {
for f in feeds
{
self.loadRSSData(rssFeed: f)
}
}
Это работает, что означает отсутствие повторяющейся ошибки, нона хорошие 30 секунд весь пользовательский интерфейс зависает.Что я здесь не так делаю?
РЕДАКТИРОВАТЬ:
func loadRSSData(rssFeed: String){
if let rssURL = URL(string: rssFeed) {
print("LOADING THE URL: ", rssURL)
// fetch rss content from url
if let contents = XMLParser(contentsOf: rssURL)
{
self.myParser = contents
}
// set parser delegate
self.myParser.delegate = self
self.myParser.shouldResolveExternalEntities = false
// start parsing
self.myParser.parse()
}
}