0

我想在 UITableView 的最后一个单元格中显示 MKMapView。

我在 UITableViewCell 中有一个 MKMapView 当我滚动 UITableViewCell 时,它会刷新 MKMapView。它崩溃并出现错误:MKMapView 必须在主线程上初始化。

当我滚动 UITableView 的滚动视图时,我应该怎么做才能防止 MKMapView 重新加载?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     [self.view endEditing:YES];
    if (indexPath.row !=[arrExit count]) //If it is not last cell
    {
        static NSString *CellIdentifier = @"BTSTicketsCellIdentifier";

        BTSComparePricesCell *cell = (BTSComparePricesCell *)[tblComparePrices dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"BTSComparePricesCell" owner:self options:nil];
            for (id oneObject in nib) if ([oneObject isKindOfClass:[BTSComparePricesCell class]])
                cell = (BTSComparePricesCell *)oneObject;
        }

             if (!isDragging_msg && !isDecliring_msg)
                {
                    [dicImages_msg setObject:[UIImage imageNamed:@"rowDefault.png"] forKey:[[arrExit objectAtIndex:indexPath.row] valueForKey:@"Merchant_Logo"]];
                    [self performSelectorInBackground:@selector(downloadImage_3:) withObject:indexPath];
                }

        return cell;
    }
    else{ //If it is a last cell

        static NSString *CellIdentifier = @"BTSTicketsCell";

        BTSMapViewCell *cell = (BTSMapViewCell *)[tblComparePrices dequeueReusableCellWithIdentifier:CellIdentifier];

        if (cell == nil)
        {
            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"BTSMapViewCell" owner:self options:nil];
            for (id oneObject in nib) if ([oneObject isKindOfClass:[BTSMapViewCell class]])
                cell = (BTSMapViewCell *)oneObject;
        }

        CLGeocoder *geocoder = [[CLGeocoder alloc] init];
        [geocoder geocodeAddressString:[flux objectForKey:@"Venue"]
                     completionHandler:^(NSArray* placemarks, NSError* error)
         {
             if (placemarks && placemarks.count > 0)
             {
                 CLPlacemark *topResult = [placemarks objectAtIndex:0];
                 MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult];

                 [cell.MapVw addAnnotation:placemark];

                 CLLocationCoordinate2D _venue = placemark.coordinate;

                 [cell.MapVw setCenterCoordinate:_venue];

                 MKCoordinateRegion region = cell.MapVw.region;
                 region.span.longitudeDelta = 1.0;
                 region.span.latitudeDelta = 1.0;
                 [cell.MapVw setRegion:region animated:YES];
             }
         }
         ];
        return cell;
    }

}

提前致谢。

4

1 回答 1

1

试试这个,希望它会工作在您的视图控制器中创建一个具有强引用的 MKMapView 实例,您将在表视图中加载地图。将 lat long 值分配给该地图视图实例。在 CellforRowAtIndexpath 上设置 cell.MapVw = mapViewInstance 。

于 2013-09-23T11:26:23.303 回答