将字符串值从地图视图传递到详细信息视图

时间:2011-10-14 21:21:33

标签: xcode variables nsstring android-mapview

我尝试在单击标注按钮后将字符串变量从Map View Controller传递到Detail View Controller。我获取了callout按钮的标题并将其存储在NSString对象中(已在Map View Controller中合成)。

然后,我在Detail View Controller中分配并初始化了Map View Controller,并尝试在新视图控制器中记录一次值,并返回null。这是代码:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control
{
    TheLocations *annotationTapped = (TheLocations *)view.annotation;

    NSLog(@"button clicked on annotaion %@", annotationTapped);

    MapViewController *thisMap = (MapViewController *)[[UIApplication sharedApplication] delegate];
    DetailViewController *dvc = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];

    dvc.title = view.annotation.title;
    pinTitle = dvc.title;
    NSLog(@"%@", pinTitle);

    [thisMap switchViews:self.view toView:dvc.view];
}

这导致成功记录“pinTitle”的值。 pinTitle已经创建并合成,所以它是这个Map View的一个字符串。

现在,我切换到Detail View并将此代码输入viewDidLoad方法:

MapViewController *mvc = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
    NSLog(@"%@", mvc.pinTitle);

它识别“pinTitle”并允许它注销但返回“(null)”,因此在某处沿着pinTitle的值丢失。当我切换视图时,如何让pinTitle保留它的值?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

在详细信息视图的viewDidLoad方法中,您要创建MapViewController的新实例,该实例与calloutAccessoryControlTapped中引用的实例分开。

在新的单独实例中,pinTitle未设置且默认值为null。

我不确定为什么在任何情况下你都需要pinTitle变量。

calloutAccessoryControlTapped中,您设置了dvc.title,因此在viewDidLoad的{​​{1}}中,您可以使用DetailViewController访问该值。您无需引用self.title