Einrichten eines Detailansicht-Controllers mithilfe eines Segues

HINTERGRUND:

Ich habe eine benutzerdefinierte UIViewController-Klasse, in der ich eine MKMapView mit benutzerdefinierten Anmerkungen auffülle. Wenn der Benutzer die Annotation auswählt, werden Details zu dieser Annotation angezeigt. Außerdem ist eine Schaltfläche vorhanden, über die der Benutzer einen anderen UIViewController mit Details zu diesem Punkt auf der Karte auswählen und aufrufen kann.

Der Code:

Ich initialisiere den neuen View Controller, indem ich die Klasse mit einer UserID erstelle (Hinweis:- (id) initWithUserID:(NSInteger) userID; wird in der Header-Datei des SecondViewControllers deklariert:

<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>

Das Erstellen des Ansichtscontrollers erfolgt durch Drücken der Taste und führt dann sofort den Übergang zum zweiten Ansichtscontroller durch:

<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>

PROBLEM:

Mit NSLOG kann ich bestätigen, dass der Wert beim Erstellen der Klasse korrekt übergeben wird. Jedoch wenn ich gehe, um die Eigenschaft zu verwendenuserID später im Code (viewWillAppear) kann ich ihn nicht mehr verwenden. Ich gehe davon aus, dass es ein Speicherproblem gibt, um das ich mich nicht kümmere, aber ich kann es anscheinend nicht herausfinden. Wie stelle ich sicher, dass die Werte / Objekte, die ich bei der Erstellung in eine Klasse übergebe, dort bleiben?

Randbemerkung: Ich habe ursprünglich versucht, einPinData Objekt, aber lief in das gleiche Problem, so dass ich weiß, es ist kein NSInteger-Problem. Ich habe auch Noas Vorschlag befolgt und verwendetprepareForSegue Ich bekomme jedoch das gleiche Problem wie oben dargestellt

Antworten auf die Frage(1)

Ihre Antwort auf die Frage