popToRootViewControllerAnimated and reloadData - PullRequest
3 голосов
/ 10 марта 2010

Я написал приложение с вкладками, где на первой вкладке у меня есть табличное представление с контроллером навигации.

TableviewController выдвигается каждый раз, когда я выбираю строку. Это удаленный каталог на сервере, например / Dir1

Когда на второй вкладке я выбираю другой корневой каталог, например, / dir2, тогда, когда я перехожу на первую вкладку, я хочу удалить все контроллеры из стека и перезагрузить представление таблицы с содержимым / dir2. Вот что я делаю

- (void)viewWillAppear:(BOOL)animated
{
   [[self navigationController] popToRootViewControllerAnimated:NO];    
   [self initFirstLevel];   // This loads the data.     
   [self.tableView reloadData];
}

Что происходит, когда tableviewControllers извлекается из стека и возвращается к rootViewController, но содержимое / dir2 не загружается в табличное представление.

1 Ответ

4 голосов
/ 10 марта 2010

При звонке на

[[self navigationController] popToRootViewControllerAnimated:NO];

navigationController попытается отобразить все контроллеры представления и отобразить контроллер topview, следующие коды не будут вызываться.

Вы должны рассмотреть обработку метода viewWillAppear topViewController для любых модификаций и перезагрузки данных.

Это пример того, что вы можете сделать с viewWillAppear в примере приложения iPhoneCoreDataRecipes Этот пример приложения предоставит вам обзор жизненных циклов контроллера представления и т. Д. *

- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:animated];

    [photoButton setImage:recipe.thumbnailImage forState:UIControlStateNormal];
    self.navigationItem.title = recipe.name;
    nameTextField.text = recipe.name;    
    overviewTextField.text = recipe.overview;    
    prepTimeTextField.text = recipe.prepTime;    
    [self updatePhotoButton];

    /*
     Create a mutable array that contains the recipe's ingredients ordered by displayOrder.
     The table view uses this array to display the ingredients.
     Core Data relationships are represented by sets, so have no inherent order. Order is "imposed" using the displayOrder attribute, but it would be inefficient to create and sort a new array each time the ingredients section had to be laid out or updated.
     */
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"displayOrder" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];

    NSMutableArray *sortedIngredients = [[NSMutableArray alloc] initWithArray:[recipe.ingredients allObjects]];
    [sortedIngredients sortUsingDescriptors:sortDescriptors];
    self.ingredients = sortedIngredients;

    [sortDescriptor release];
    [sortDescriptors release];
    [sortedIngredients release];

    // Update recipe type and ingredients on return.
    [self.tableView reloadData]; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...