Configurando um controlador de visualização de detalhes usando um segue

FUNDO:

Eu tenho uma classe UIViewController personalizada onde eu preenche um MKMapView com anotações personalizadas. Quando o usuário seleciona a anotação, os detalhes sobre essa anotação são exibidos, e um botão também está presente para o usuário selecionar e exibir outro UIViewController com detalhes sobre esse ponto no mapa.

O código:

Eu inicializo o novo controlador de visualização criando a classe com um UserID (Nota:- (id) initWithUserID:(NSInteger) userID; é declarado no arquivo de cabeçalho do SecondViewController:

<code>@interface SecondViewController ()

@property (nonatomic) NSInteger userID;

@end



@implementation RainFallDetailedViewController

@synthesize userID = _userID;


- (id) initWithUserID:(NSInteger) userID{

_userID = userID;
NSLOG(@"UserID: %i",self.userID); //correctly displays user id

return self;
}

- (void) viewWillAppear{
NSLOG(@"UserID: %i",self.userID); //userid is now 0
</code>

A criação do controlador de visualização é feita quando o botão é pressionado e, em seguida, executa imediatamente o segue para o segundo controlador de visualização:

<code>- (void)mapView:(MKMapView *)mapView 
annotationView:(MKAnnotationView *)view calloutAccessoryControlTapped:(UIControl *)control {

if ([(UIButton*)control buttonType] == UIButtonTypeInfoLight){ //I'm looking for recognition of the correct button being pressed here.
    //SecondViewController is the second view controller with the detailed information about the map point.  
    //DataPoint is a custom class that contains the details regarding the map point.
    SecondViewController *detailedMapController = [[SecondViewController alloc] initWithUserID:((DataPoint *)view.annotation).userID]; 

    NSLOG(@"UserID: %i", ((DataPoint *)view.annotation).userID); //correctly displays userID

    [self performSegueWithIdentifier:@"PinDetail" sender:detailedMapController];


} 
}
</code>

PROBLEMA:

Usando o NSLOG, posso confirmar que o valor está sendo passado corretamente ao criar a classe. No entanto, quando vou usar a propriedadeuserID mais tarde no código (viewWillAppear), não está mais lá para eu usar. Estou assumindo que há um problema de memória que não estou cuidando, mas não consigo entender. Como posso garantir que os valores / objetos que eu passo para uma classe após a criação ficam lá?

Nota lateral: Eu originalmente tentei, passando umPinData objeto, mas correu para o mesmo problema, então eu sei que não é um problema NSInteger. Eu também segui a sugestão de noa e useiprepareForSegue no entanto, recebo o mesmo problema apresentado acima

questionAnswers(1)

yourAnswerToTheQuestion