如何在两个viewcontroller之间共享mapkit的变量?

时间:2011-12-29 16:11:33

标签: ios uiviewcontroller

我希望在" 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];

1 个答案:

答案 0 :(得分:1)

我假设你想要分享的变量是drink。如果您刚刚在两个视图控制器中将drink声明为ivar,则不会自动“共享”它。在location中分配+ init goAddView后,drinknil 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
}