1

簡単なテストアプリで2つのことをしようとしています。

beginBackgroundTaskWithExpirationHandlerの使用方法を学ぶのに行き詰まっています

ユーザーがホームボタンを押したときにbackgroundTaskを実行したい(特別なことは何もありません)。9分以内に、時間が期限切れになりそうなことをユーザーに警告し(可能であれば)、ユーザーがアプリに戻って10分を更新できるようにします。

iOS3または4との下位互換性は必要ありません。

4

2 に答える 2

3

コードをバックグラウンドで続行する場合は、バックグラウンドタスクでコードをラップする必要があります。終了時に電話をかけることも非常に重要endBackgroundTaskです。そうしないと、割り当てられた時間が経過した後にアプリが強制終了されます。

- (IBAction) buttonPressed: (id) sender

        [self beingBackgroundUpdateTask];

        // Do your long running background thing here

        [self endBackgroundUpdateTask];
    });
}
- (void) beingBackgroundUpdateTask
{
    self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask];
    }];
}

- (void) endBackgroundUpdateTask
{
    [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
    self.backgroundUpdateTask = UIBackgroundTaskInvalid;
}
于 2012-07-06T14:39:15.827 に答える
1

applicationDidEnterBackgroundの関数にコードを入れますUIApplicationDelegate。を設定してUILocalNotificationスケジュールする必要があります。applicationWillEnterForegroundまた、有効期限が切れる前にユーザーがアプリに戻らないように、おそらく無効にする必要があります。

- (void)applicationDidEnterBackground:(UIApplication *)application
{
  UILocalNotification *timerNotification = [[UILocalNotification alloc] init];
  //set up notification with proper time and attributes
  [[UIApplication sharedApplication] scheduleLocalNotification:timerNotification];
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
  [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

そこで指定したキャンセル コードは、実際にはすべての通知をキャンセルします。複数の通知があり、特定の通知のみをキャンセルしたい場合は、userInfo設定時に通知のプロパティにキーと値を指定する必要があります。次に、アプリケーションがフォアグラウンドに入ると、次のようにして、すべてのアクティブな通知のリストを取得します

NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];

それらをループし、userInfo必要なものに到達するまでチェックしてから、そのものをキャンセルします

[[UIApplication sharedApplication] cancelLocalNotification:whateverNotification];

于 2012-07-06T14:34:17.797 に答える