6

さて、SimpleBackgroundFetch サンプル プロジェクトを見ていましたが、App Delegate で以下を使用しています。

[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:someTimeInSeconds];
//^this code is in didFinishLaunchingWithOptions


-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
  //do something + call completionHandler depending on new data / no data / fail
}

したがって、基本的には、ここでアプリのサーバーを呼び出してデータを取得すると想定しています。

しかし、その後 NSURLSession docsを見たところ、これらのようなメソッドがありました

– downloadTaskWithURL:

そして次のように述べた。

この API は、認証をサポートするためのデリゲート メソッドの豊富なセットを提供し、アプリが実行されていないとき、または iOS でアプリが中断されているときに、アプリがバックグラウンド ダウンロードを実行できるようにします。

では、これら 2 つの API の違いは何でしょうか? また、アプリのサーバーからデータを時々ダウンロードしたい場合は、何を使用すればよいでしょうか?

2つの違いがよくわからなかったので、ここで疑問を明確にする必要があると思いました. スタックオーバーフローに行きましょう!

4

4 に答える 4

3

アプリケーション デリゲートは完了ハンドラーを格納するためのもので、ダウンロードが完了したときに呼び出すことができます。

    - (void)application:(UIApplication *)application handleEventsForBackgroundURLSession:(NSString *)identifier completionHandler:(void (^)())completionHandler {
    NSLog(@"Handle events for background url session");

    self.backgroundSessionCompletionHandler = completionHandler;
}

そしてハンドラを呼び出します

- (void)URLSessionDidFinishEventsForBackgroundURLSession:(NSURLSession *)session {
    WebAppDelegate *appDelegate = (WebAppDelegate *)[[UIApplication sharedApplication] delegate];
    if (appDelegate.backgroundSessionCompletionHandler) {
        void (^completionHandler)() = appDelegate.backgroundSessionCompletionHandler;
        appDelegate.backgroundSessionCompletionHandler = nil;

        completionHandler();
    }
    NSLog(@"All tasks are finished");
}
于 2013-09-28T18:42:21.760 に答える