Перезагрузить данные TableView, если пользователь разрешил или отклонил получение текущего местоположения - PullRequest
0 голосов
/ 02 октября 2010

У меня есть CLLocationManager в приложении.Так что мне нужен метод, чтобы узнать, разрешил ли пользователь или отклонил текущее местоположение.По словам пользователей, ответ TableController добавляет значение в таблицу определенным образом.Я попытался [sightsTableView reloadData]; в
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation, но после того, как я выбрал разрешение или отклонение, просмотр таблицы не перезагружается.Я проверил ссылку Apple на CLLocation и не смог найти что-то полезное.UPD: вот пример кода.

 - (void)viewDidLoad {  
      super viewDidLoad];

      [[self locationManager] startUpdatingLocation]; 
      [tempTableView reloadData];
   }
 - (CLLocationManager *)locationManager {

 if (locationManager != nil) {
    return locationManager;
}

        locationManager = [[CLLocationManager alloc] init];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
        [locationManager setDelegate:self];



return locationManager;
}

  - (void)locationManager:(CLLocationManager *)manager
          didUpdateToLocation:(CLLocation *)newLocation
                 fromLocation:(CLLocation *)oldLocation {

          NSLog(@"User allow get location");
          self.locationError = NO;
          [tempTableView reloadData];

        }



- (void)locationManager:(CLLocationManager *)manager
         didFailWithError:(NSError *)error {
    NSLog(@"User declined get location");
    self.locationError = YES;
    [tempTableView reloadData];


    }

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 .... some big code about a sells )...

    cell.textLabel.text = array.title;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    if(self.locationError == NO){
    cell.detailTextLabel.text = @"!";
            }
            return cell;
 }

UPDATE : На самом деле проблем с перезагрузкой нет.Я понял, что у меня проблема с обновлением таблицы.Если я начинаю прокручивать таблицу, ячейка показывает новое значение.

ВТОРОЕ ОБНОВЛЕНИЕ Теперь таблица обновляется.Проблема заключалась в том, как я позвонил UITableView.Я использовал [tempTableView reloadData];, но он не работал для меня, поэтому я попытался использовать это [self.tableView reloadData];, и теперь это ПЕРЕЗАГРУЗКА значений и ОБНОВЛЕНИЕ.

Ответы [ 2 ]

0 голосов
/ 03 октября 2010

Вы установили точку останова и подтвердили, что код для перезагрузки данных табличного представления действительно выполняется? Если он не запускается, вы уверены, что установили свой контроллер представления в качестве делегата CLLocationManager?

Чтобы определить, отказался ли пользователь разрешить вам получить свое текущее местоположение, вы можете реализовать locationManager: didFailWithError: и посмотреть, является ли код ошибки kCLErrorDenied.

Обновление

Большая часть вашей проблемы - эти строки

BOOL locationError = NO;
BOOL locationError = YES;

Это создает новую переменную, которая просто живет в этом методе, вместо установки переменной locationError, которая живет в вашем классе. Вы либо хотите удалить BOOL, либо выполните self.locationError = NO;

0 голосов
/ 02 октября 2010
locmanager = [[CLLocationManager alloc] init];
[locmanager setDelegate:self];
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];

if (!locmanager.locationServicesEnabled)
{
    [contentView setText:@"Location Services Are Not Enabled"];
    return;
}
...