필요할 때마다 현재 위치를 가져오고 위치 업데이트를 즉시 중지하려고합니다. 이를 위해 다음 코드를 작성했지만 휘발성 플래그를 기다리는 continuos는 작동하지 않는 것 같습니다. 내가 깃발을 기다릴 때 위치 업데이트가 실행되지 않습니다. 누군가 내 코드에서 잘못된 점을 알려주시겠습니까? 감사.iOS : 위치가 업데이트 될 때까지 계속 깃발을 대기 중입니다.
CurrentLocation.h file:
@property (nonatomic, assign) volatile BOOL locationUpdatedFlag;
@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) CLLocation *currentLocation;
CurrentLocation.m file:
@synthesize currentLocation = _currentLocation;
@synthesize locationManager = _locationManager;
@synthesize locationUpdatedFlag = _locationUpdatedFlag;
- (void)xxx
{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[self.locationManager startUpdatingLocation];
self.locationUpdatedFlag = NO;
while(!self.locationUpdatedFlag)
[NSThread sleepForTimeInterval:.1];
// Use self.currentLocation
}
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
self.currentLocation = newLocation;
self.locationUpdatedFlag = YES;
[manager stopUpdatingLocation];
}
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"Error from Location Manager");
self.locationUpdatedFlag = YES;
}
대리자 메소드는 위치 관리자를 시작한 동일한 스레드에서 실행되며 'sleepForTimeInterval'을 사용하여 차단합니다. –
나는 이것에 대해 생각했지만 어쨌든 이것을 고칠 수 있습니까? – applefreak
일반적인 방법은'while() {sleep} '부분을 제거하고'/ self.currentLocation 사용'작업을 관리자를 중지 한 후에'locationManager : didUpdateToLocation : fromLocation :'에서 호출 된 별도의 메소드로 옮기는 것입니다. 그것은 대표자의 가장 자연스러운 사용이며 그것을 사용하고자합니다. 그 외에도'locationUpdatedFlag' 키 패스에 옵서버를 추가하거나 여러분이했던 것처럼 수동으로 기다리는'separate' 스레드를 수동으로 생성하는 것과 같은 다른 솔루션이 많이 있습니다. –