Как я могу разделить переменную для mapkit между двумя viewcontroller? - PullRequest
0 голосов
/ 29 декабря 2011

Я хочу показать аннотацию булавки на новом контроллере представления, когда кнопка "карта" нажата на контроллере представления верхнего уровня.

Поэтому я использовал метод "IBAction" в файле методов контроллера верхнего уровня, как показано ниже. Тогда значения широты и долготы появились нормально (в NSLog) из списка свойств. Но я не вижу аннотации булавки на новом контроллере представления.

Однако, если я добавлю код, помеченный «code for 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 Ответ

1 голос
/ 29 декабря 2011

Я предполагаю, что переменная, которой вы хотите поделиться, drink. Если вы только что объявили drink в качестве ивара в обоих контроллерах представления, это не "поделится" им автоматически. После того, как вы выделите + init location в 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 и до , когда вы звоните 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...