У меня есть диспетчер tableview, который необходимо развернуть и показать 3 слоя данных. У меня нет проблем с сверлением, но когда я возвращаюсь, ячейки и стол становятся пустыми. В настоящее время я использую раскадровку, и у меня не было этой проблемы, когда я использовал nib. Все, что мне нужно было, это выделить и initWithNibName в том же представлении, и он создаст другой экземпляр одного TableView, и я смогу вернуться и все данные будут там.Повторное использование того же UITableViewController
Я пробовал использовать segue, но он не работает, так как мне нужен контроллер tableview, чтобы отстроить себя, если я сверлюсь. Я создал свой собственный метод, чтобы нажать на контроллер представления и передачи данных в новый экземпляр себе
- (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];
}
Это то, что у меня в viewDidLoad
- (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', с другой стороны, вызывается при создании _and_, когда вы поп. – matt
", но я не могу различать сверление и восстановление с помощью viewDidAppear. На самом деле это не так. Если это то, что вам нужно сделать, чтобы это работало, вам нужно спросить об этом. – matt
Можете ли вы рассказать мне, создал ли я новый вид с помощью метода drillDown выше? У меня никогда не было этой проблемы с использованием файлов nib, но раскадровка сводит меня с ума. –