将地理位置坐标传递给 UITableViewCell 的问题

issue passing geolocation coords to UITableViewCell

首先我用我需要的地址创建了一个 NSString

NSString *bldgAddress = [NSString stringWithFormat:@"%@ %@ %@", listingsDisplayed.ADDRESS1, listingsDisplayed.TOWN, listingsDisplayed.ZIPCODE];

然后我调用了 LMGeocoder Github Link

[[LMGeocoder sharedInstance] geocodeAddressString:bldgAddress service:kLMGeocoderGoogleService completionHandler:^(LMAddress *address , NSError *error) {
 if (address && !error) {
 _latitude = [NSString stringWithFormat:@"%f", address.coordinate.latitude];
 _longitude = [NSString stringWithFormat:@"%f", address.coordinate.longitude];
 } else {
 NSLog(@"%@", error);
 }}];

到这里为止一切正常,_lat 和 _long 在我的 .h 文件中声明并分别赋值

cell.lat.text = [NSString stringWithFormat:@"%@,%@", _latitude, _longitude];

当我尝试将该数据加载到单元格中时问题开始,它显示 (null),(null)。 我不明白为什么这些值会消失,任何帮助将不胜感激


编辑: 感谢@dhanush

的有效代码
    __block UILabel *currentLAbel = cell.lat;
[[LMGeocoder sharedInstance] geocodeAddressString:bldgAddress service:kLMGeocoderGoogleService completionHandler:^(LMAddress *address , NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{

        if (address && !error) {
            listingsDisplayed.Latitude = [NSString stringWithFormat:@"%f", address.coordinate.latitude];
            listingsDisplayed.Longitude = [NSString stringWithFormat:@"%f", address.coordinate.longitude];

            currentLAbel.text = [NSString stringWithFormat:@"%@,%@", listingsDisplayed.Latitude, listingsDisplayed.Longitude];
            cell.lat = currentLAbel;

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

您在块中获取纬度和经度...这是异步的,因此不会在主线程上执行。

您在从块中获取值之前设置了纬度和经度值。这就是您获得空值的原因。

你设置断点并跟踪执行流程,你就会明白。

祝你好运!! :)

试试这个

    UILabel *currentLAbel = cell.lat;
    [[LMGeocoder sharedInstance] geocodeAddressString:bldgAddress service:kLMGeocoderGoogleService completionHandler:^(LMAddress *address , NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{

    if (address && !error) {
        listingsDisplayed.Latitude = [NSString stringWithFormat:@"%f", address.coordinate.latitude];
        listingsDisplayed.Longitude = [NSString stringWithFormat:@"%f", address.coordinate.longitude];

        currentLAbel = [NSString stringWithFormat:@"%@,%@", listingsDisplayed.Latitude, listingsDisplayed.Longitude];
        cell.lat = currentLabel;

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

您应该始终在主线程中进行 UI 更改。最初这些值为空。获得这些值后,您可以将其设置在块内。如果您正在滚动 table,CurrentLabel 将有助于获取特定标签。尝试 cell.lat。如果它不起作用,请使用当前标签。