我剛開始使用iPhone開發,並感謝許多人在那裏,我得到了一個簡單的應用程序工作。我正在使用下面的代碼從MySQL數據庫中提取數據。代碼位於commonfun.swift文件中,我保存所有的函數,並且在需要時調用各種swift文件。由於通信鏈接,它會嘗試30秒。Swift Xcode NSURLConnection.sendSynchronousRequest已棄用
這一切都很好。它同步,因爲它將數據加載到函數「結尾」的數組中,並「返回」到調用的swift文件。
樣品編號如下:
import UIKit
class commonfunc
{
var result1: [String] = [];
func DB_To_Array_Swift(whattoget: String, inout jsondata: NSDictionary)
... set up stuff
... call php to get data
while while_exit == "NO"
{
number_of_retries = number_of_retries + 1
if number_of_retries > 30
{
break
}
do
{
urlData = try NSURLConnection.sendSynchronousRequest(request, returningResponse:&response)
while_exit = "YES"
}
catch let error as NSError
{
tmperror = error
while_exit = "NO"
sleep(1)
}
}
... load data into an array and return to calling swift file.
的偉大工程!並從不同標準的各種swift文件中調用。
現在它說NSURLConnection.sendSynchronousRequest折舊。
我試圖用NSURLSession.sharedSession()替換它,但它運行異步並返回到主swift文件。
我試圖用下面的替換它。但是.....
while while_exit == "NO"
{
number_of_retries = number_of_retries + 1
if number_of_retries > 30
{
while_exit == "YES"
break
}
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(request)
{
(
let urldata, let response, let error) in
if error != nil
{
tmperror = error!
while_exit = "NO"
sleep(1)
}
let dataString = NSString(data: urldata!, encoding: NSUTF8StringEncoding)
print(dataString)
while_exit = "YES"
}
print("\n here5")
task.resume()
print("\n here6")
}
while while_exit == "NO"
{
sleep(1)
}
我有辦法使它看起來同步在commonfunc.swift
感謝
'sleep'很不好,同步網絡是非常壞。始終有一種使用異步模式的方法。在你的情況下使用'NSURLSession'和'NSURLSessionDataTask'並實現委託方法。在'didCompleteWithError'中,啓動一個計時器並在出錯時重新運行任務,或者從接收到的數據創建字符串並繼續*將數據加載到數組中並返回調用swift文件*。 – vadian