-1

私のアプリでは、コア データ DB にデータを入力する必要があり、バックグラウンドでも実行したい

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4
        if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking
            UIApplication *application = [UIApplication sharedApplication]; //Get the shared application instance

            __block UIBackgroundTaskIdentifier background_task; //Create a task object

            background_task = [application beginBackgroundTaskWithExpirationHandler: ^ {
                [application endBackgroundTask: background_task]; //Tell the system that we are done with the tasks
                background_task = UIBackgroundTaskInvalid; //Set the task to be invalid

                //System will be shutting down the app at any point in time now
            }];

            //Background tasks require you to use asyncrous tasks

            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                //Perform your tasks that your application requires

                DBSync *sync = [DBSync sharedInstance];

                [sync startDownloadDataandUpdateDB];

                [application endBackgroundTask: background_task]; //End the task so the system knows that you are done with what you need to perform
                background_task = UIBackgroundTaskInvalid; //Invalidate the background_task
            });
        }
    }
}

問題は、メソッド「startDownloadDataandUpdateDB」が呼び出されることですが、このメソッドは DBSync の他のメソッドを呼び出しますが、これらの他のメソッドは機能しません。理解できません

4

1 に答える 1

0

その方法でネットワーク呼び出しを行うことは、あまり良い方法ではないと思います。

ドキュメントには、タスクを実行して戻るのに約 5 秒かかると記載されています。

beginBackgroundTaskWithExpirationHandler をご覧になることをお勧めします。

于 2014-05-19T12:58:15.017 に答える