Область объекта, target-c, CLLocationManager - PullRequest
0 голосов
/ 24 октября 2010

Я все еще довольно новичок в программировании, поэтому у меня возник вопрос о нубе. Когда у меня есть переменная экземпляра, в моем случае типа CLLocationManager, в моем файле appDelegate.m, я подумал, что могу выделить и инициализировать переменную экземпляра CLLocationManager в методе applicationDidFinishLaunching. И тогда я мог бы использовать кнопку для запускаUpdatingLocation в другом методе (так как я вызываю его из другого класса). Это, похоже, не работает, и я думаю, что мне нужно было выделить / инициализировать в том же методе, который я запускаю UpdatingLocation. Это правда? Нужно ли остановитьUpdatingLocation в том же методе? Мой код ниже:

(locationManager is declared as a property)


- (void)stopUpdating {
    [locationManager stopUpdatingLocation];
}

- (double)distanceTraveled {
    return distanceTraveled;
}

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after application launch
    [window addSubview:rootController.view];    
    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [window makeKeyAndVisible];
}

- (void)startUpdating {
    [locationManager startUpdatingLocation];
}

Похоже, я должен делать это больше похоже на:

- (void)startUpdating {
locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
}

Если я должен сделать это вторым способом, это потому, что область действия объекта CLLocationManager предназначена только для метода, в котором он находится? Я думал, что имея его в качестве переменной экземпляра, я смогу использовать его в других методах, и у меня может быть отдельный метод для startUpdatingLocation и stopUpdatingLocation. Спасибо.

1 Ответ

2 голосов
/ 24 октября 2010

То, что вы изначально считали правильным.Если у вас есть переменная экземпляра, эта переменная остается доступной вам в течение всего срока службы объекта (в данном случае ваш делегат приложения).

Если то, что вы делаете, не работает, это из-за какой-то другой проблемы,вам не нужно выделять новый CLLocationManager каждый раз, когда вы вызываете startUpdating.

...