如果用户允许或拒绝获取当前位置,请重新加载TableView数据

时间:2010-10-02 18:39:35

标签: iphone tableview cllocationmanager

我在应用中有CLLocationManager。所以我需要的是知道用户允许或拒绝当前位置的方法。根据用户回答TableController以特定方式在表中添加值。我尝试了[sightsTableView reloadData]; - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation但在我选择允许或拒绝后,tableview不会重新加载。我检查了Apple的CLLocation参考,但找不到有用的东西。 UPD:这是codde样本。

 - (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;
 }

更新: 实际上重装没有问题。我知道刷新表视图有问题。如果我开始滚动表单元格显示新值。

第二次更新 现在桌子很新鲜。问题是我如何调用UITableView。我使用[tempTableView reloadData];,但它对我不起作用,所以我尝试使用这个[self.tableView reloadData];,现在它是RELOADING值并刷新它。

2 个答案:

答案 0 :(得分:0)

locmanager = [[CLLocationManager alloc] init];
[locmanager setDelegate:self];
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];

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

答案 1 :(得分:0)

您是否设置了断点并确认重新加载表视图数据的代码实际上正在运行?如果没有运行,您确定已将视图控制器设置为CLLocationManager的委托吗?

要检测用户是否拒绝允许您获取其当前位置,您可以实现locationManager:didFailWithError:并查看错误的代码是否为kCLErrorDenied。

<强>更新

我问题的主要部分是这些行

BOOL locationError = NO;
BOOL locationError = YES;

这是创建一个只存在于该方法中的新变量,而不是设置您的类中的locationError变量。您要么删除BOOL,要么执行self.locationError = NO;