У меня есть tableviewcontroller, который должен развернуть и показать 3 уровня данных. У меня нет проблем с детализацией, но когда я возвращаюсь, ячейки и таблица становятся пустыми. В настоящее время я использую раскадровку, и у меня не было этой проблемы, когда я использовал перо. Все, что мне нужно было сделать, это выделить и initWithNibName одно и то же представление, и это создаст еще один экземпляр того же TableView, и я смогу вернуться, и все данные будут там.
Я пытался использовать переход, но он не работает, так как мне нужно, чтобы tableviewcontroller возвращался к самому себе, если я углубляюсь. Я создал свой собственный метод для отправки контроллера представления и передачи данных в новый экземпляр самого себя.
- (void)drillDown{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
ExerciseTableViewController *tableView = [storyboard instantiateViewControllerWithIdentifier:@"ExerciseTableView"];
tableView.title = _detailTitle;
tableView.delegate = self;
tableView.level = _level;
tableView.currentSMID = _currentSMID;
tableView.currentMID = _currentMID;
tableView.muscleNameArray = _muscleNameArray;
if (_level == 2) {
tableView.submuscleNameArray = _submuscleNameArray;
}
[self.navigationController pushViewController:tableView animated:YES];
}
Это то, что у меня есть на мой взглядDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
UIBarButtonItem *add = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(addExercise:)];
self.navigationItem.rightBarButtonItem = add;
NSLog(@"level: %i, currentSMID: %i, currentMID: %i", _level, _currentSMID, _currentMID);
if (self.managedObjectContext_ == nil) {
self.managedObjectContext_ = [(AppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
}
if (_level == 1) {
_submuscleNameArray = [self submuscleGroup:_currentMID valueForKeyPath:@"submuscleGroup"];
_submuscleIDArray = [self submuscleGroup:_currentMID valueForKeyPath:@"submuscleID"];
} else if (_level == 2) {
//loading and sorting exercise list
_exerciseList = [self loadExercise:_currentMID sub:_currentSMID];
_exerciseListSorted = [self sortKeysByName];
} else {
[self loadMuscleGroup];
}
}
Представление таблицы заполняется только тогда, когда я помещаю часть этого кода в viewDidAppear, но я не могу различить детализацию и возврат с помощью viewDidAppear.
Разве навигационный контроллер не должен сохранять мой текущий вид и нажимать новый вид, и когда я открываю новый вид, я возвращаюсь к своему текущему виду?
Кажется, что каждый раз, когда я открываю представление, предыдущее представление должно загружаться снова, и это приводит к тому, что мои предыдущие представления становятся пустыми.
Какие-либо предложения?
Раскадровка прикреплена
viewDidLoad
вызывается только один раз в жизни контроллера представления, поэтому, если вы видите, что он вызывается при выталкивании, вы не выталкиваете.viewDidAppear
, с другой стороны, вызывается при создании и при извлечении. - person matt   schedule 26.04.2015viewDidLoad
вызывается только один раз для контроллера упражнений? Если это так, то должно происходить что-то еще; как вы говорите, на него не следует влиять, просто нажимая на него и возвращаясь к нему. - person matt   schedule 26.04.2015