-6

スレッドを使用してバックグラウンドでジオローカライズしたい! しかし、できません。スケジューラ、スレッド、操作などを試しました...しかし、すべてprogressBarの進行をブロックします。

4

2 に答える 2

2

このような場所にシングルトンオブジェクトを使用しています...

@implementation LocationManager

#pragma mark - singleton method

+ (LocationManager*)sharedInstance
{
    static dispatch_once_t predicate = 0;
    __strong static id sharedObject = nil;
    dispatch_once(&predicate, ^{
        sharedObject = [[self alloc] init];
    });
    return sharedObject;
}

#pragma mark - instance methods

-(id) init {
    if (self = [super init]) {
        _currentLocation = [[CLLocation alloc] init];
        _locationManager = [[CLLocationManager alloc] init];
        _locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
        _locationManager.delegate = self;
    }
    return self;
}

- (void)start
{
    [self.locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    //if the time interval returned from core location is more than two minutes we ignore it because it might be from an old session
    if ( abs((int) [newLocation.timestamp timeIntervalSinceDate: [NSDate date]]) < 120) {
        self.currentLocation = newLocation;
    }
}

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
//    [[[UIAlertView alloc] initWithTitle:@"Error" message:[error description] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show];
}

@end

じゃあ電話するしかないな…

[[LocationManager sharedInstance] start];

シングルトンは位置の追跡を開始します。

私が呼ぶより...

[[LocationManager sharedInstance] currentLocation];

現在の場所の。

これを使用して、CLGeocoder の既に非同期のメソッドに渡すことができます。

位置追跡を開始してすぐに位置を取得することに頼ることはできません. このような方法を使用する必要があります。

于 2013-03-18T08:23:54.390 に答える
0

CLGeocoder はバックグラウンドで実行されています。

于 2013-03-18T09:01:48.013 に答える