我希望在" map"时显示新视图控制器上的引脚注释。单击上一级视图控制器上的按钮。
所以我使用了" IBAction"上层控制器的方法文件的方法如下。 然后,纬度和经度值从属性列表中正常显示(在NSLog中)。 但我无法在新视图控制器上看到引脚注释。
但是,如果我将代码标记为"代码为viewDidLoad"在新的视图控制器上(名为" location")然后我可以看到引脚注释。 但纬度和经度值仅为0.00000。
我认为变量不是在两个视图控制器之间共享的。 请帮我解决这个问题。
- (IBAction) goAddView:(id)sender {
// the code for viewDidLoad
double myLat = [[drink objectForKey:lati_KEY] doubleValue];
double myLong = [[drink objectForKey:long_KEY] doubleValue]; CLLocationCoordinate2D theCoordinate;
theCoordinate.latitude = myLat;
theCoordinate.longitude = myLong;
NSLog(@"the latitude = %f",theCoordinate.latitude);
NSLog(@"the longitude = %f",theCoordinate.longitude);
myAnnotation *myAnnotation1=[[myAnnotation alloc] init];
myAnnotation1.coordinate=theCoordinate;
myAnnotation1.title=@"Destination";
myAnnotation1.subtitle=@"in the city";
[self.mapView addAnnotation:myAnnotation1];
// the code end
location *lm= [[location alloc] initWithNibName:@"location" bundle:nil];
[self.navigationController pushViewController:lm animated:YES];
答案 0 :(得分:1)
我假设你想要分享的变量是drink
。如果您刚刚在两个视图控制器中将drink
声明为ivar,则不会自动“共享”它。在location
中分配+ init goAddView
后,drink
将nil
lm
。推送/显示viewDidLoad
中的location
方法将被调用。
将值传递给location
的一种方法是使用属性。首先,将drink
声明为location
视图控制器中的属性:
//in location.h:
@property (retain) NSDictionary *drink;
//in location.m:
@synthesize drink;
//and release in dealloc if not using ARC
接下来,在之后设置属性,然后在goAddView
和中分配+ init,然后调用pushViewController
:
- (IBAction) goAddView:(id)sender
{
location *lm = [[location alloc] initWithNibName:@"location" bundle:nil];
lm.drink = drink; //point drink in lm to the one in current vc
[self.navigationController pushViewController:lm animated:YES];
//and do [lm release]; if not using ARC
}