저는 iPhone 개발에 착수했습니다. 많은 개발자 덕분에 간단한 응용 프로그램을 사용할 수있게되었습니다. 나는 mysql 데이터베이스에서 데이터를 가져 오기 위해 다음 코드를 사용했다. 이 코드는 commonfun.swift 파일에 있으며 모든 기능을 보유하고 있으며 필요에 따라 다양한 신속한 파일에서 호출합니다. 통신 링크로 인해 30 초 동안 시도합니다.Swift Xcode NSURLConnection.sendSynchronousRequest는 더 이상 지원되지 않습니다
모두 훌륭합니다. 이것은 함수의 "끝"에서 배열로 데이터를로드하고 호출하는 swift 파일로 "return"하기 때문에 동기화됩니다.
샘플 코드는 다음과 같습니다
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()으로 바꾸려고했지만 비동기로 실행되어 기본 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'는 동기 네트워킹은 아주 아주 나쁜입니다 }) task.resume() dispatch_semaphore_wait (세마포어, DISPATCH_TIME_FOREVER) 반환 데이터, 오류 = 오류 {인쇄 (오류)} dispatch_semaphore_signal (세마포어)를 보자 나쁜. 비동기 패턴을 사용하는 방법은 항상 있습니다. 귀하의 경우에는 'NSURLSession'과'NSURLSessionDataTask'를 사용하고 대리자 메소드를 구현하십시오. 'didCompleteWithError'에서 타이머를 시작하고 에러시 태스크를 다시 실행하거나 수신 된 데이터에서 문자열을 생성하고 배열로 데이터를로드 한 다음 swift 파일 *로 돌아갑니다. – vadian