2017-06-30 29 views
0

タイトルにはAlamofireでbackgroundURLを設定しました。それはシミュレータの魅力のように動作しますが、私のデバイスではそうではありません。私はURLで経験したことがないので、私はここで何かが欠けていると確信しています。私のViewControllerでAlamofireのバックグラウンドはシミュレータでは動作しますが、デバイスでは動作しません

class NetworkManager { 

static let shared = NetworkManager() 

private lazy var backgroundManager: Alamofire.SessionManager = { 
    let bundleIdentifier = MyStruct.identifier 
    return Alamofire.SessionManager(configuration: URLSessionConfiguration.background(withIdentifier: bundleIdentifier)) 
}() 

var backgroundCompletionHandler: (() -> Void)? { 
    get{ 
     return backgroundManager.backgroundCompletionHandler 
    } 
    set{ 
     backgroundManager.backgroundCompletionHandler = newValue 
    } 
} 

}

func application(_ application: UIApplication, handleEventsForBackgroundURLSession identifier: String, completionHandler: @escaping() -> Void) { 
    NetworkManager.shared.backgroundCompletionHandler = completionHandler 
} 

: は、ここで私がこれまで持っているコードです

func populateArrays(){ 
Alamofire.request("http://www.aps.anl.gov/Accelerator_Systems_Division/Accelerator_Operations_Physics/sddsStatus/mainStatus.sdds.gz").responseData { response in 
     switch response.result{ 
     case .success: 
      print("Validation Successful") 
     case .failure(let error): 
      print(error.localizedDescription) 
     } 
     if let data = response.result.value{ 
+0

携帯電話で実行中にコンソールからエラーログが表示されますか? –

+0

エラーはありません。それは単にURLとの通信を停止します。 – oblagon

+0

そこにブレークポイントを設定して、httpコールが携帯電話から実行されていることを確認できますか? –

答えて

1

はそれを解決しました。この問題を抱えている人は、次のコードをappDelegateに追加する必要があります。

func applicationDidEnterBackground(_ application: UIApplication) { 
    var bgTask = 0 
    var app = UIApplication.shared 
    bgTask = app.beginBackgroundTask(expirationHandler: {() -> Void in 
     app.endBackgroundTask(bgTask) 
}) 
+0

これは、タスクが応答を受け取るのに十分な長さのフォアグラウンド要求を保持しているためにのみ機能します。バックグラウンド動作が必要な場合は、作成したバックグラウンドセッションマネージャを使用する必要があります。ただ作成するだけでは不十分です。 –

+0

作品は....... –

関連する問題