2016-03-24 12 views
0

vorbei habe ich diesen Code unten, dass die Zeile zu meiner anderen Klasse senden:ID NSString return null, wenn in einer anderen Klasse

[self performSegueWithIdentifier:@"MeInfos" sender:[NSString stringWithFormat:@"%d",(int)indexPath.row]]; 

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    MeInfosViewController *viewController = [[MeInfosViewController alloc] init]; 
    viewController.paramethersToLoad = (NSString*)sender; 
    NSLog(@"Will receive -> %@",sender); 
} 

In meiner anderen Klasse (MeInfoViewController) Ich habe:

. h

@property (nonatomic, retain) NSString *paramethersToLoad; 

.m

@synthesize paramethersToLoad; 

-(void)viewDidAppear:(BOOL)animated{ 
    NSLog(@"What comes? -> %@",paramethersToLoad); 
} 

Dieser Code hat ein kleines Problem, in der Konsole erhalte ich folgende Meldungen:

Will receive -> 4 
What comes? -> (null) 

, warum dies geschieht und was der beste Weg, es zu lösen?

Antwort

2

Der View-Controller, den Sie in prepareForSegue erstellen: ist nicht die Instanz, die das Segment tatsächlich lädt. Der View-Controller, der tatsächlich angezeigt wird, wird von der iOS-Laufzeitumgebung erstellt und Ihnen als Eigenschaft im Segment übergeben.

Was Sie wollen, ist:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    MeInfosViewController *viewController = (MeInfosViewController *)segue.destinationViewController; 
    viewController.paramethersToLoad = (NSString *)sender; 
} 
2

Ihre prepareForSegue sollte wie folgt aussehen:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if ([[segue identifier] isEqualToString:@"MeInfos"]) { 
     // Get reference to the destination view controller 
      MeInfosViewController *viewController = [segue destinationViewController]; 

      viewController.paramethersToLoad = (NSString*)sender; 
    } 
} 
Verwandte Themen