Web サイトにアクセスし、そのサイトから HTML をダウンロードして文字列に変換し、文字列から情報を取得して、それをアプリに使用するアプリがあります。私の問題は、データが実際にロードされる前に、文字列を抽出するコードが実行されることです。そのコードを完了ハンドラーに入れてみましたが、問題が解決しなかったか、間違っていました。これが私のコードです:
for var i = 0; i <= textViewContentArray.count - 1; i++ {
var dontCount = false
isTaskComplete = false
var currentWord = textViewContentArray[i]
let url = NSURL(string: "http://words.bighugelabs.com/" + currentWord)
var request: NSURLRequest = NSURLRequest(URL: url!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task : NSURLSessionDataTask = session.dataTaskWithRequest(request, completionHandler: {(data, response, error) in
if error == nil {
//Getting String From URL Data
let urlContent = NSString(data: data!, encoding: NSUTF8StringEncoding)!
if urlContent.containsString("Word not found.") == false && urlContent.containsString("I couldn't find that.") == false && urlContent.containsString("Not Found") == false {
//Extracting Needed Info From String
let startPointArray = urlContent.componentsSeparatedByString("ul class=\"words\">")
let url1 = startPointArray[1]
let endPointArray = url1.componentsSeparatedByString("</ul><h3>sounds kind of like")
var wordsBodyString = endPointArray[0]
wordsBodyString = wordsBodyString.stringByReplacingOccurrencesOfString("</a></li>", withString: "")
let wordsBasicArray = wordsBodyString.componentsSeparatedByString("<li><a href=\"/")
var wordsAdvancedArray: [String] = []
for var i = 0; i <= wordsBasicArray.count - 1; i++ {
var currentWordArray = wordsBasicArray[i].componentsSeparatedByString("\">")
wordsAdvancedArray.append(currentWordArray[0] as! String)
}
for var i = 0; i <= wordsAdvancedArray.count - 1; i++ {
if count(wordsAdvancedArray[i]) < count(currentWord) {
shorterWordsArray.append(wordsAdvancedArray[i])
}
}
shorterWordsArray.removeAtIndex(0)
shorterWordsArrayGlobal[i] = shorterWordsArray
})
task.resume()
}
urlContent 定数には、Web サイト データが読み込まれる前に値が割り当てられます。それが起こらないようにする方法が必要です。私はプログラミングにかなり慣れていないので、答えを念頭に置いてください。よろしくお願いします。