2016-11-10 10 views
2

iOSアプリケーションがURLSessionを使用してバックグラウンド状態に移行するときに、Webサービスタスクを完了する方法はありますか? 巨大なサイズのファイルをサーバーにアップロードしようとしていません。代わりに4桁のキーをアップロードしようとしています。 私はバックグラウンドタスクのために以下の方法を試しました。バックグラウンド状態でのWebサービスの完了iOS

var bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: {}) 

テスト目的のために、私はループ内でwebserviceを呼び出してログに記録しています。バックグラウンドモードに移行すると、Webサービスの呼び出しが滞っています。

+0

[Swift - NSURLSessionのバックグラウンドでのダウンロードは可能ですか?](http://stackoverflow.com/questions/33503164/swift-nsurlsession-downloading-in-background) –

+1

この質問を見ることもできます:http ://stackoverflow.com/questions/40395810/downloading-in-background-and-waking-app-when-finished/40395988#40395988 – pbodsk

答えて

0
class func generalPost(url: String, postCompleted : (response: String) ->()) { 
     let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
     let session = NSURLSession.sharedSession() 
     request.HTTPMethod = "POST" 
     let dataString = "" 
     request.HTTPBody = dataString.dataUsingEncoding(NSUTF8StringEncoding) 

     let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
      let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)      

      postCompleted(response: strData)     
     }) 
     task.resume() 
    } 

そして、あなたはそれが本当にタスクは時間がかかりますどのくらいに依存

generalPost(url: "http://stackoverflow.com/") { (response) in 
      dispatch_async(dispatch_get_main_queue(), {() -> Void in 
       UIAlertView(title: "Message", message: response, delegate: nil, cancelButtonTitle: "Ok").show()     
      }) 
     } 
+0

答えてくれてありがとうございます。しかし、探しているものではありません。アプリケーションがアクティブ状態からバックグラウンド状態に移動します。 – good4pc

0

ビッグアップロード/ダウンロードファイルのiOS 7

で導入

を使用することができます。大規模なダウンロードやアップロードのタスク(ビデオのダウンロードなど)の場合は、バックグラウンド構成のNSURLSessionを使用してタスクを実行する必要があります。 iOSシステムはアップロード/ダウンロードタスクを処理します。ダウンロードが完了すると、ダウンロードしたファイルは一時ファイルに保存されます(後で別の場所にコピーする必要があります)。有限長の動作のためのiOS 6

で導入Downloading in background and waking app when finished

通常のWebサービス(私はこれがあなたが望むものであることを考える)

、あなたはbeginBackgroundTaskWithExpirationHandlerを使用することができます。背景の設定でNSURLSessionを設定持っている

var task = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler(){} 
//do your job (call the service) 
//on completion you shouldcall the bellow two lines 
UIApplication.sharedApplication().endBackgroundTask(task) 
task = UIBackgroundTaskInvalid 

必要はありません。

+0

はい..私は通常のWebサービスを探しています。私はあなたが投稿したように同じことをしました、私はこのシナリオをチェックするためのWebサービスコールループを作った。しかし、アプリケーションがバックグラウンドに移動すると、動きが止まってしまいます。ビルド設定 - >機能 - >バックグラウンドモード - >バックグラウンドフェッチは有効です – good4pc

+0

バックグラウンドフェッチを有効にする必要はありません。 Webサービスコールの結果を取得したら、 'endBackgroundTask'を呼び出す必要があります。私はこれが非常に高速なWebサービスのためだけに使用されるべきであることを再度伝えています。あなたのコードを共有できますか? – ELKA

+1

このWWDCビデオを見てみることをお勧めします。[background fetch](https://developer.apple.com/videos/play/wwdc2013/204/)また、NSURLSessionに関連するものもあります。どちらも、バックグラウンドに入ったときにアプリがどのように動作するかを理解するのに役立ちます – ELKA

関連する問題