2016-03-24 4 views
0

у меня есть этот код ниже, отправить строку в мой другом класс:идентификатора для NSString возврата нуля при переходе к другому классу

[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); 
} 

В моем другом классе (MeInfoViewController) у меня есть:

. ч

@property (nonatomic, retain) NSString *paramethersToLoad; 

.m

@synthesize paramethersToLoad; 

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

Этот код имеет маленькую проблему, в консоли я получаю следующие сообщения:

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

Почему это происходит и что лучший способ решить эту проблему?

ответ

2

Контроллер вида, который вы создаете в prepareForSegue: не является экземпляром, который на самом деле загружает segue. Контроллер представления, который фактически отображается, создается средой выполнения iOS и передается вам как свойство в сегменте.

Что вы хотите:

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

Ваш prepareForSegue должен выглядеть следующим образом:

-(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; 
    } 
} 
Смежные вопросы