Передача строкового значения из вида карты в детальный вид - PullRequest
0 голосов
/ 15 октября 2011

Я пытаюсь передать строковую переменную из контроллера представления карты в контроллер подробного представления после нажатия кнопки выноски.Я взял название кнопки выноски и сохранил ее в объекте NSString (который был синтезирован в контроллере вида карты).

Затем я выделил и инициализировал контроллер вида карты в контроллере подробного вида и попыталсязарегистрируйте значение один раз в новом контроллере представления, и оно вернулось как нуль.Вот код:

- (void)mapView:(MKMapView *)mapView annotationView:(MKAnnotationView *)view 
calloutAccessoryControlTapped:(UIControl *)control
{
    TheLocations *annotationTapped = (TheLocations *)view.annotation;

    NSLog(@"button clicked on annotaion %@", annotationTapped);

    MapViewController *thisMap = (MapViewController *)[[UIApplication sharedApplication] delegate];
    DetailViewController *dvc = [[DetailViewController alloc]initWithNibName:@"DetailViewController" bundle:nil];

    dvc.title = view.annotation.title;
    pinTitle = dvc.title;
    NSLog(@"%@", pinTitle);

    [thisMap switchViews:self.view toView:dvc.view];
}

Это приводит к успешному журналу значения "pinTitle".pinTitle был создан и синтезирован, так что это строка этого представления карты.

Теперь я переключаюсь в представление подробностей и ввел этот код в метод viewDidLoad:

MapViewController *mvc = [[MapViewController alloc]initWithNibName:@"MapViewController" bundle:nil];
    NSLog(@"%@", mvc.pinTitle);

Itраспознает «pinTitle» и позволяет ему выйти из системы, но возвращает «(null)», поэтому где-то по пути значение pinTitle было потеряно.Как получить pinTitle, чтобы сохранить его значение при переключении видов?Большое спасибо за помощь!

1 Ответ

1 голос
/ 15 октября 2011

В методе подробного представления viewDidLoad вы создаете новый экземпляр MapViewController, который отделен от экземпляра, на который ссылается calloutAccessoryControlTapped.

В этом новом отдельном экземпляре pinTitle не установлен и имеет значение по умолчанию, равное нулю.

Я не уверен, зачем вам нужна переменная pinTitle в любом случае.

В calloutAccessoryControlTapped вы устанавливаете dvc.title, поэтому в viewDidLoad из DetailViewController вы получите доступ к этому значению, используя self.title.Вам не нужно ссылаться на MapViewController.

...