Konfigurowanie kontrolera widoku szczegółowego za pomocą segue
TŁO:
Mam niestandardową klasę UIViewController, w której zapełniam MKMapView niestandardowymi adnotacjami. Gdy użytkownik wybierze adnotację, zostaną wyświetlone szczegóły dotyczące tej adnotacji, a także przycisk umożliwiający użytkownikowi wybranie i wyświetlenie kolejnego kontrolera UIViewController ze szczegółami dotyczącymi tego punktu na mapie.
Kod:
Inicjalizuję nowy kontroler widoku, tworząc klasę z identyfikatorem użytkownika (Uwaga:- (id) initWithUserID:(NSInteger) userID;
jest zadeklarowany w pliku nagłówkowym 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>
Tworzenie kontrolera widoku odbywa się po naciśnięciu przycisku, a następnie natychmiast wykonuje segue do drugiego kontrolera widoku:
<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:
Za pomocą NSLOG jestem w stanie potwierdzić, że wartość jest przekazywana poprawnie podczas tworzenia klasy. Jednak kiedy idę do korzystania z nieruchomościuserID
później w kodzie (viewWillAppear) nie mogę już z niego korzystać. Zakładam, że jest problem z pamięcią, o który nie dbam, ale nie mogę tego zrozumieć. Jak mogę się upewnić, że wartości / obiekty, które przechodzę do klasy po utworzeniu pozostają tam?
Uwaga boczna: pierwotnie próbowałem, mijającPinData
obiekt, ale wpadłem na ten sam problem, więc wiem, że nie jest to problem NSIntegera. Podążyłem też za sugestią NoaprepareForSegue
jednak mam ten sam problem przedstawiony powyżej