Я реализовал pull для обновления в своем приложении, которое при извлечении запускает менеджер местоположений, чтобы исправить местоположение пользователей, а затем представляет контроллер модального представления, показывающий это местоположение.
Проблема, с которой я сталкиваюсь, заключается в том, что контроллер модального представления представляется до того, как было получено местоположение пользователя, что приводит к пустой карте еще на несколько секунд, пока она не будет получена и обновлена.
У меня есть свойство, которое содержит текущее местоположение пользователей. Можно ли «удерживать» до тех пор, пока это свойство не станет равным нулю (т. е. местоположение не будет установлено) перед вызовом обновления для вызова «showMap», возможно, если он не может найти пользователя после установленного времени, он просто выдает ошибку ? Я попытался использовать цикл while, чтобы постоянно проверять свойство currentLocation, но это не казалось правильным и в любом случае не работало.
Это мой код обновления, который настроен в viewDidLoad:
__typeof (&*self) __weak weakSelf = self;
[self.scrollView addPullToRefreshWithActionHandler:^ {
int64_t delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[weakSelf showMap];
});
}];
Когда используется запрос на обновление, он вызывает следующие методы:
- (void)showMap
{
[self.locationManager updateCurrentLocation];
[NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(finishRefresh) userInfo:nil repeats:NO];
}
- (void)finishRefresh
{
[self.scrollView.pullToRefreshController didFinishRefresh];
[self performSegueWithIdentifier:@"showMap" sender:self];
}