0

ユーザーの位置を追跡するためにシングルトン クラスを使用しています。実行中のアプリ内からクラスをインスタンス化して追跡を開始すると、すべてが桃色になります。

ただし、アプリが閉じられている場合 (アプリ スイッチャーでバックグラウンド化されていないため)、再起動すると、アクティブなイベントがあるかどうかを確認します。この場合、クラスをインスタンス化し、位置追跡を開始します。が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];

}
4

1 に答える 1