2016-07-09 5 views
-2

Я сделал segue, передавая строку, которая сообщает следующему контроллеру представления, какой экземпляр для синтаксического анализа CoreData для. Проблема в том, что я использую некоторый код, который вызывает методы init, и отправленная строка не инициализируется при ее вызове. Тем не менее, переход работает, когда я отобразить строку в представлении контроллера-адресата viewDidLoadПрохождение nesting через segue nil по методам init, но действительный on viewdidload

- (id)init 
{ 
    self = [super init]; 
    if (self) 
    { 

     [self initFakeData]; 
    } 
    return self; 
} 

Когда этот метод initFakeData называется он устанавливает график и потребности упражнения, чтобы держать действительное значение

- (void)initFakeData 
{ 
    NSString *myExercise=exercise; //returns nil 
    if (myExercise==nil) 
    { 
     [email protected]"Default"; 
    } 
} 

Между тем ...

-(void)viewDidLoad{ 
    NSString *myExercise=exercise; //returns value 
} 

упражнения это свойство, которое инициализируется предыдущего контроллера представления в Tableview

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 

    if ([segue.identifier isEqualToString:@"showGraph"]) { 
     JBLineChartViewController *destViewController = segue.destinationViewController; 
     NSString *myExericse=[NSString stringWithFormat:@"%@", [[_exercises valueForKey:@"exercise"]objectAtIndex:indexPath.row]]; 
     NSLog(@"%@",myExericse); 
     destViewController.exercise = myExericse; 
    } 
} 

ответ

0

Новый контроллер вид выделяется и инициализируется перед темprepareForSegue называется. Все, что вам нужно сделать с CoreData, должно быть сделано в viewDidLoad. Или вы можете сделать это позже, например. в viewWillAppear или viewDidAppear.

1

Поведение верное, поскольку в течение initexercise в JBLineChartViewController не был установлен. Если вам нужен атрибут exercise для метода init, чтобы установить определенное поведение, которое должно быть до viewDidLoad, мое предложение не использовать segue, а сделать назначенный initWithExercise и нажать контроллер в коде. Возможно, например:

- (IBAction)chartButtonPressed:(id)sender { 

    JBLineChartViewController *vc = [[ShopViewController alloc]initWithExercise:@"EXERCISE_STRING_HERE"]; 
    [self showViewController:vc sender:self]; 

}