ViewDidLoad не вызывается во второй раз Xcode

У меня есть tableViewController, из которого я перехожу к UIViewController. Чтобы сохранить значение indexPath.row, я использовал целое число, и на основе этого целочисленного действия выполняется в UIViewController. Проблема в том, что когда я нажимаю кнопку «Назад» и выбираю другой индекс таблицы, он переходит к UIViewContoller, но выполняемое действие является первым. ViewDidLoad не вызывается во второй раз. вот мой код.

Код представления таблицы:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.iaRecipieViewController) {
        self.iaRecipieViewController = [[[iRecipieViewController alloc] initWithNibName:@"iRecipieViewController" bundle:nil] autorelease];
    }
    if (indexPath.row == 0) {
        self.iaRecipieViewController.myLableArray =labelSoupArray ;
    }

    if (indexPath.row == 1) {
        self.iaRecipieViewController.myLableArray =labelSoupArray ;
    }

    if (indexPath.row == 2) {
        self.iaRecipieViewController.myLableArray =labelSoupArray ;
    }
    // custom string is an NSinteger
    self.iaRecipieViewController.customString = indexPath.row;
    NSLog(@"  int  %i",self.iaRecipieViewController.customString);
    NSLog(@"index path %i ", indexPath.row) ;

    [self.navigationController pushViewController:iaRecipieViewController animated:YES];

    [detailTable reloadData];
}

Код UIViewController.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    myLabel.text = [self.myLableArray objectAtIndex:customString];
}

person Usman Ali    schedule 04.03.2013    source источник


Ответы (3)


Используйте 1_

-(void)viewWillAppear:(BOOL)animated {

  [super viewWillAppear:animated];
  myLabel.text = [self.myLableArray objectAtIndex:customString];

}

viewDidLoad будет вызываться только при загрузке представления; нажатие нового ViewController, а затем его удаление не приведет к перезагрузке представления. viewWillAppear вызывается перед визуализацией представления, поэтому у вас есть возможность что-то делать, когда оно становится основным представлением.

person Richard Brown    schedule 04.03.2013

ViewDidLoad вызывается только один раз при создании экземпляра представления. Основываясь на вашем коде, вы перемещаетесь вперед и назад по этому представлению, и поэтому представление не создается (загружается) каждый раз, а скорее загружается один раз, и теперь это действительно представление исчезает и появляется, когда вы возвращаетесь назад и вперед к этому Посмотреть.

Поместите свой код в ViewWillAppear или ViewDidAppear.

person Khaled Barazi    schedule 04.03.2013

Метод

(void)viewDidLoad

запускается при загрузке представления. Если ваше представление уже загружено (означает, что оно все еще находится в памяти), возможно, оно исчезло с экрана. Но это не значит, что память ушла; Просто перезапустите, когда представление должно загрузиться в память.

person junkor    schedule 05.03.2013