2011-12-29 62 views
0

我想在上层视图控制器上单击“地图”按钮时在新视图控制器上显示引脚注释。如何在两个viewcontroller之间共享mapkit的变量?

因此,我对上级控制器的方法文件使用了“IBAction”方法,如下所示。 然后从属性列表中正常显示经纬度值(在NSLog中)。 但我无法在新的视图控制器上看到引脚注释。但是,如果我在新视图控制器(名为“位置”)上放置标记为“code for viewDidLoad”的代码,则可以看到引脚注释。 但是经度和纬度值只有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; 
    [email protected]"Destination"; 
    [email protected]"in the city"; 
    [self.mapView addAnnotation:myAnnotation1]; 
// the code end 

    location *lm= [[location alloc] initWithNibName:@"location" bundle:nil]; 
    [self.navigationController pushViewController:lm animated:YES]; 

回答

1

我假设你想分享的变量是drink。如果您在两个视图控制器中声明drink是ivar,那么它将不会自动“共享”它。在您分配+ locationgoAddView后,drinknillm后。当您推送/呈现时,location中的viewDidLoad方法将被调用。

将值传递给location的一种方法是使用属性。首先,在location视图控制器声明drink作为一个属性:

//in location.h: 
@property (retain) NSDictionary *drink; 
//in location.m: 
@synthesize drink; 
//and release in dealloc if not using ARC 

接下来,设置属性你的alloc +在goAddView初始化它,你叫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 
} 
+0

谢谢你非常喜欢你的答案。我需要学习更多。 :-)新年快乐,祝你好运。非常感谢。 – 2011-12-31 03:37:58