重复调用从iOS应用程序中的多个视图地理定位Singleton类

时间:2014-07-30 07:18:04

标签: ios geolocation singleton cllocationmanager

在阅读了有关堆栈溢出和其他一些文章的一些建议后,我实现了一个单例类,允许我调用一个方法来更新用户的当前位置。为了避免持续更新位置信息,我添加了一个StopUpdatingPosition调用。这是第一次正常工作,但是在调用失败后。

我认为这是因为在提供的示例中启动地理定位的方式,它会检查单例是否已经到位(?)

如果单例初始化,它会保留在内存中吗?在后续的电话中,我可以检查是否是这种情况,只是要求它开始更新位置?

这是我到目前为止所尝试的内容。

- (id)init {
    self = [super init];

    if(self) {
        self.locationManager = [CLLocationManager new];
        [self.locationManager setDelegate:self];
        [self.locationManager setDistanceFilter:kCLDistanceFilterNone];
        [self.locationManager setHeadingFilter:kCLHeadingFilterNone];
        [self.locationManager startUpdatingLocation];
        geocoder = [[CLGeocoder alloc] init];
    }

    return self;
}

+ (LocationFunction*)sharedSingleton {
    static LocationFunction* sharedSingleton;
    if(!sharedSingleton) {
        @synchronized(sharedSingleton) {
            sharedSingleton = [LocationFunction new];
        }
    }

    return sharedSingleton;
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"didUpdateToLocation: %@", newLocation);
    CLLocation *currentLocation = newLocation;

    if (currentLocation != nil) {
        myLat = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.latitude];
        myLong = [NSString stringWithFormat:@"%.8f", currentLocation.coordinate.longitude];
    }

    // Store the Long & Lat to global variables here
    NSLog(@"Resolving the Address");


        } else {
    // Handle location lookup fail here
        }
    } ];
    [manager stopUpdatingLocation];
    }

我正在寻找一种从不同视图控制器调用外部类中的方法的方法。该方法获得用户的当前位置(Long& Lat),将信息记录在全局变量中,停止任何更新位置方法的请求,并在完成后通知视图控制器。

指针赞赏。

1 个答案:

答案 0 :(得分:0)

另一个stackoverflow question有一个答案可以提供解决方案。但请注意,调用不正确(我无法对答案发表评论 - 对于stackoverflow来说太新了!)。它应该引用“sharedManager”:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [[MyClass sharedManager] startCapture];
}

希望这有助于任何人搜索。