我尝试在单击标注按钮后将字符串变量从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保留它的值?非常感谢你的帮助!
答案 0 :(得分:1)
在详细信息视图的viewDidLoad
方法中,您要创建MapViewController
的新实例,该实例与calloutAccessoryControlTapped
中引用的实例分开。
在新的单独实例中,pinTitle
未设置且默认值为null。
我不确定为什么在任何情况下你都需要pinTitle
变量。
在calloutAccessoryControlTapped
中,您设置了dvc.title
,因此在viewDidLoad
的{{1}}中,您可以使用DetailViewController
访问该值。您无需引用self.title
。