Я только начал с разработки iPhone, и благодаря многим там я получил простое приложение, работающее. Я использовал следующий код для извлечения данных из базы данных mysql. Код находится в файле commonfun.swift, где я держу все функции, и это вызов из любого быстрого файла при необходимости. Из-за линий связи он будет пытаться в течение 30 секунд.Swift Xcode NSURLConnection.sendSynchronousRequest устарел
Все это отлично работает. Он синхронизируется, потому что он загружает данные в массив в «конце» функции и «возвращает» в вызывающий быстрый файл.
ОБРАЗЦА КОД СЛЕДУЮЩЕМ:
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.
Работает отлично! и получает вызов из разных быстрых файлов с разными критериями.
Теперь сказано, что NSURLConnection.sendSynchronousRequest обесценивается.
Я попытался заменить его NSURLSession.sharedSession(), но он запустил async и вернулся к основному быстрому файлу.
Я попытался заменить его ниже. но .....
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 file *. – vadian