0

我想将对象添加到 NSMutableArray 类型的实例 var 中,我在一个块中创建(reverseGeocodeLocation)。我可以看到已定义对象中的值。但我无法让它工作,将它们添加到实例变量中。

我已经考虑过 __block 或 __strong 前缀。但我似乎错过了什么。你能给我一个线索吗?运行块中的代码后,实例 var "tableviewRows" 仍然为空。

谢谢!塞巴斯蒂安

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {

    CLLocation *currentLocation = [locations lastObject];
    CLGeocoder *geoCoder = [[CLGeocoder alloc] init];

    [geoCoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
        if (error == nil && [placemarks count] > 0) {
            CLPlacemark *placemark = [placemarks lastObject];
            CLLocation *userLocation = [placemark location];

            NSString *latitude = [NSString stringWithFormat:@"Lat. %f degrees", userLocation.coordinate.latitude];
            NSString *longitude = [NSString stringWithFormat:@"Long. %f degrees", userLocation.coordinate.longitude];
            NSString *altitude = [NSString stringWithFormat:@"Alt. %f m", userLocation.altitude];
            NSString *speed = [NSString stringWithFormat:@"Speed %f m/s", userLocation.speed];
            NSString *course = [NSString stringWithFormat:@"Course %f degrees", userLocation.course];

            [self.tableViewRows insertObject:latitude atIndex:0];
            [self.tableViewRows insertObject:longitude atIndex:1];
            [self.tableViewRows insertObject:altitude atIndex:2];
            [self.tableViewRows insertObject:speed atIndex:3];
            [self.tableViewRows insertObject:course atIndex:4];

        } else {
            NSLog(@"%@", error.debugDescription);
        }
    }];

    [self.tableView reloadData];
}
4

2 回答 2

0

后台操作完成后,您必须重新加载表。所以它应该在完成处理程序中。

尝试这个

__block NSArray *dataArray;

[geoCoder reverseGeocodeLocation:currentLocation 
               completionHandler:^(NSArray *placemarks, NSError *error) {
//...

   dataArray = @[latitude, longitude, altitude, speed, course];
   NSLog(@"Just checking... %@", dataArray);
   dispatch_sync(dispatch_get_main_queue(), ^{
      self.tableViewRows = [NSMutableArray arrayWithArray:dataArray];
      [self.tableView reloadData];
   });
 }];
于 2013-04-27T22:03:41.537 回答
0

我只是又调试了一些......但仍然是同样奇怪的事情......数组 self.tableViewRows 正在填充块内的数据。但是,一旦我在外面的数组上尝试“计数”,返回的值为 0。在块内它是 5,应该是?!?

于 2013-04-27T22:55:31.190 回答