下面是我的一些代碼片段CLLocationManager stopUpdatingLocation不會停止
BOOL checkingForLocation;
.
.
.
- (IBAction)LocationButtonTapped:(id)sender {
[locationManager startUpdatingLocation];
checkingForLocation = YES;
}
.
.
.
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
[locationManager stopUpdatingLocation];
// locationManager = nil;
if (checkingForLocation) {
checkingForLocation = NO;
NSLog(@"here");
// fetch data from server using location and present view controllers
}
}
didUpdateLocations被多次調用,因爲是的LocationManager持續更新每startUpdatingLocation位置。我的應用程序有一個錯誤,if(checkingForLocation)
中的代碼多次運行並多次呈現視圖導致不期望的結果。
1)爲什麼stopUpdatingLocation不會停止對didUpdateLocations的進一步調用?
2)此外,如果checkingForLocation
已經被設置爲NO
爲什麼到didUpdateLocations隨後調用還是把checkingForLocation
爲YES
。那裏有種族條件嗎?
通過搜索其他SO問題,我發現設置locationManager = nil
將停止對didUpdateLocations的額外調用,它確實解決了我的情況中的問題,但沒有真正的解釋。看來,stopUpdatingLocation應該照顧到這一點。任何見解都非常感謝。
謝謝
你在哪裏調用'[locationManager startUpdatingLocation]; checkingForLocation = YES;'? – OgreSwamp
@OgreSwamp我在按下按鈕時調用它。爲了清楚起見,我添加了上面的IBAction方法。 – galenom