locationManagerが更新を受信し、CoreDataを使用して保存するバックグラウンドタスクが存在するようにアプリを設定しようとしています。locationManagerをバックグラウンドタスクとして実行するために使用しているコードは次のとおりです。
(void)viewDidLoad
{
[super viewDidLoad];
timerAndMap = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endDate];
}];
if(nil == locationManager) {
locationManager = [[CLLocationManager alloc] init];
}
locationManager.delegate = self;
locationManager.distanceFilter = 500;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
[[UIApplication sharedApplication] endBackgroundTask:timerAndMap];
}
ただし、私が抱えている問題は、デリゲートメソッドをバックグラウンドスレッドの一部にする方法を理解することです。locationManagerがdidUpdateToLocationを呼び出すとき、新しい場所の経度、緯度、および日付をエンティティの属性として一時的なmanagedObjectContextに保存し、メインスレッドで確立されたManagedObjectContextとマージします(アプリがバックグラウンドで実行されている新しいコアデータエンティティは、メインスレッドのManagedObjectContextに保存できません)。