2011-12-29 115 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