Я рефакторинг старого кода, чтобы сделать вещи чистыми, особенно часть геолокации, которая сейчас довольно беспорядочна.
Я регистрирую все методы геолокации и обнаружил, что didUpdateLocations
вызывается слишком долго.
Вот некоторый код из моего Splashscreen:
- (void)viewDidLoad
{
[super viewDidLoad];
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
[self startLocationRetrieval];
}
Вот метод startLocationRetrieval
-(void) startLocationRetrieval
{
if ([_locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)])
[_locationManager requestWhenInUseAuthorization];
if ([CLLocationManager locationServicesEnabled]) {
_locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[_locationManager startUpdatingLocation];
}else {
_isDataLoaded = YES;
[self loadHomeView];
}
Вот методы делегата CLLocation
#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
DDLogError(@"GEOLOC CLLocationManager didFailWithError: %@", error);
[self loadHomeView];
}
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
DDLogInfo(@"GEOLOC Splashscreen didUpdateLocations -> %@", locations);
[self manageNewLocation:[locations lastObject]];
}
И мой метод обработки изменений местоположения
-(void) manageNewLocation:(CLLocation *)location
{
_coordinate = location;
DDLogDebug(@"GEOLOC Splash manageNewLocation = %@", _coordinate);
[self loadHomeView];
}
Метод loadHomeView просто инициирует PerformSegueWithIdentifier для перехода на домашнюю страницу.
- Как вы думаете, это хорошая реализация или она может быть чище?
- Где я должен
stopUpdatingLocation
?
Я нашел этот похожий вопрос IOS didUpdateLocations. Но делает ли NSTimer
правильный путь, он кажется неуклюжим.