plist でバックグラウンド ロケーション モードをセットアップして、バックラウンドでもロケーションの更新に応答できるようにすることができます。次に、場所で更新されたコールバックで日没時刻を取得し、その時刻にローカル通知をスケジュールします。
また、通知を管理し、不適切なものを無効にすることをお勧めします (場所の変更 = > 新しい通知)。
更新:
特定の状況では、位置データの連続ストリームは必要ありません。重要な位置変更の追跡は問題ありません。このアプローチは、plist で要求されたバックグラウンド ロケーション モードを必要とせず、光の速さでバッテリーを消耗しません。ここで情報を見つけることができます: - (void)startMonitoringSignificantLocationChanges。バックグラウンド位置モードのアプリがバックグラウンドで継続的に実行されていなくても、位置更新コールバックを実行するためにのみ呼び出されることに注意してください。
したがって、最初に次のことを行います。
[locationManager startMonitoringSignificantLocationChanges];
次に、ロケーション更新コールバックで次のことを行います。
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// check location
// get time of sunset
// schedule UILocalNotification
}
iOS 4.Objective-C で UILocalNotification を使用してリマインダーを設定するという記事を見つけました。これもチェックしてください:バックグラウンドでコードを実行する+日付にアラームをスケジュールする