質問

I'm trying to put everything location related inside a model. When I call this my MainViewController, the simulator doesn't ask me for my location, and nothing happens.

When I use the same code from my model, but put it directly in ViewDidLoad in my ViewController, everything works. I'm having a hard time understanding why.

Here is my model:

@implementation Location
{
    CLLocationManager *_locationManager;
    CLLocation *_location;
}

- (void)startLocationManager
{
    NSLog(@"In startLocationManager");
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    _locationManager.delegate = self;

    [_locationManager startUpdatingLocation];
}

#pragma mark - LocationManager Delegates

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    NSLog(@"In didUpdateLocations");

    if (locations) {
        _location = [locations lastObject];
        NSLog(@"%@", _location);
    }

}

@end

I call this in my MainViewController like this:

- (void)viewDidLoad
{
    [super viewDidLoad];
    Location *location = [[Location alloc] init];
    [location startLocationManager];
}

Why does the code work like a charm directly in the viewController, but not through my model?

役に立ちましたか?

解決

I figured it out.

I needed to make location a property of your view controller instead of a local variable in the viewDidLoad. Otherwise it is created and deallocated within that method. I need it to live through the lifecycle of my view controller.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top