RSSフィードからXMLを取得し、各記事のリンクを取得してから、これらの記事から情報を抽出しようとしています。私はxmlを得るためにAEXML、リンク抽出のためにReadabilityKitを使用しています。非同期呼び出し内の非同期呼び出しが実行されない
XMLからのリンクを正常にプルしていますが、可読性に関するパーサー呼び出しは決して実行されません。私はすべてのUIをブロックするので、これをメインスレッドでは望んでいませんが、これまでのところ、私がそれを機能させる唯一の方法です。コードは(発送はメインキューを取得することを取り除い)以下である:
func retrieveXML() {
let request = NSURLRequest(URL: NSURL(string: "<XML URL HERE>")!)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
(data, response, error) in
if data == nil {
print("\n\ndataTaskWithRequest error: \(error)")
return
}
do {
let xmlDoc = try AEXMLDocument(xmlData: data!)
for child in xmlDoc.root.children {
if let postURL = child["id"].value {
let url = NSURL(string: postURL)
let parser = Readability(url: url!)
let title = parser.title()
print("TITLE: \(title)")
}
}
} catch {
print(error)
}
}
task.resume()
}
これを試しましたか? 'DispatchQueue.main.async { のlet URL = NSURL(文字列:postURL) LETパーサ=可読性(URL:URL!) LETタイトル= parser.title() プリント( "TITLE:\(タイトル)") } ' – heikomania
コンパイルしない@heikomania = /。しかし、メインのキューに "parser = Readability ..."という行を置くとUIがブロックされますが、これは嫌です。 – kerbelda
ええ、スウィフト3でメインキューにディスパッチしますが、コンセプトは正しいです:「可読性」はデッドロックであるため、別のキューに非同期にディスパッチする必要があります。しかし、私はそれにメインキューを使うべきではない、と私は同意します。もちろん、Swift 2を使用している場合は、Swift 2構文を使用します。 – Rob