2015-04-26 4 views
1

У меня есть диспетчер 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.

Разве навигационный контроллер не должен сохранять мой текущий вид и нажимать новое представление, и когда я появляюсь в новом представлении, я возвращаюсь к своему текущему виду?

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

Любые предложения?

раскадровки прилагается Storyboard

+0

Предполагается, что я бы предположил, что на самом деле вы не выскакиваете - вы, вероятно, случайно создаете совершенно новый экземпляр этого контроллера вида. - Также имейте в виду, что 'viewDidLoad' вызывается только один раз в жизни контроллера вида, поэтому, если вы видите, что он вызывается, когда вы поп, вы не выскакиваете. 'viewDidAppear', с другой стороны, вызывается при создании _and_, когда вы поп. – matt

+0

", но я не могу различать сверление и восстановление с помощью viewDidAppear. На самом деле это не так. Если это то, что вам нужно сделать, чтобы это работало, вам нужно спросить об этом. – matt

+0

Можете ли вы рассказать мне, создал ли я новый вид с помощью метода drillDown выше? У меня никогда не было этой проблемы с использованием файлов nib, но раскадровка сводит меня с ума. –

ответ

0

Так я понял, что был вопрос. У меня есть переменная с именем _level, и я использую ее для отслеживания уровня детализации, в котором я участвую. При передаче этой переменной на следующий уровень я заменил текущий уровень на следующий номер уровня, поэтому, когда я возвращаюсь к предыдущий вид. Текущий уровень тот же, что и на следующем уровне, который ввернул вещи.

Я решил это, создав новую переменную под названием nextLevel и передав ее вниз.

Очень простая ошибка с моей стороны.

Смежные вопросы