ユーザーの位置を追跡するためにシングルトン クラスを使用しています。実行中のアプリ内からクラスをインスタンス化して追跡を開始すると、すべてが桃色になります。
ただし、アプリが閉じられている場合 (アプリ スイッチャーでバックグラウンド化されていないため)、再起動すると、アクティブなイベントがあるかどうかを確認します。この場合、クラスをインスタンス化し、位置追跡を開始します。がlocationManager
インスタンス化され、ステータスバーに位置矢印が表示されますが、
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
or
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
never get called
何か案が?
コード シングルトン クラス:
@interface AlarmMeTrackUserLocation () <CLLocationManagerDelegate>
@property (strong, nonatomic) CLLocationManager *locationManager;
@end
@implementation AlarmMeTrackUserLocation
-(void)toggleLocationUpdates:(bool)toggle {
if (!toggle) {
[self.locationManager stopUpdatingLocation];
self.locationManager = nil;
sharedInstance = nil;
NSLog(@"--- UserTrack Stopped ---");
return;
}
if (!self.locationManager && toggle) {
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
self.locationManager.pausesLocationUpdatesAutomatically = YES;
self.locationManager.distanceFilter = 200;
}
NSLog(@"--- UserTrack Started");
[self.locationManager startUpdatingLocation];
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
...
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error {
...
}
+ (AlarmMeTrackUserLocation *)sharedTrackUserLocation {
if (sharedInstance == nil) {
sharedInstance = [[super allocWithZone:NULL] init];
//NSLog(@"--- New Instance created ---");
return sharedInstance;
}
NSLog(@"--- Existing Instance Used ---");
return sharedInstance;
}
AppDelegate からのコード:
@property (strong, nonatomic) AlarmMeTrackUserLocation *userTrack;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...
self.userTrack = [AlarmMeTrackUserLocation sharedTrackUserLocation];
self.userTrack.event = currentEvent;
[self.userTrack toggleLocationUpdates:YES];
}