0

J'ai une application iOS qui a un mainControllerView, là, je crée un UINavigationController et ensuite je pousse dans ce UINavController un nouveau UIViewController appelé FirstViewController, et d'autres vues.Mise à jour ou rechargement d'un UIViewController à partir d'un autre contrôleur à l'aide de UINavigationController?

En bref est quelque chose comme ceci:

MainController(UIVIewController) 
    | 
    --> UINavController 
     | 
      --> FirstViewController(UIViewController) 
     | 
      --> SecondViewController(UIViewController) 
     | 
      --> AddViewController 

En outre, à l'intérieur du FirstViewController J'ai un UITableView, que UITableView est alimenté par CoreData.

Maintenant, j'ai décidé d'ajouter un bouton système "plus" dans le coin supérieur droit (de la barre de navigation) pour ajouter une autre ligne dans la base de données et donc cela devrait être reflété dans la vue UITableview. Ce que j'ai fait a été créer une autre vue personnalisée, appelée AddViewController qui est poussée dans la pile NavController quand j'appuie sur ce bouton "plus". Dans cette vue, je viens d'ajouter quelques champs de texte et un bouton pour mettre à jour la base de données, cela fonctionne, cependant, je ne trouve pas un moyen de mettre à jour le UITableView, qui est à l'intérieur de FirstViewController, quand je repasse.

Encore une fois, bref,

UINavController(with FirstViewController) 
1.-When I press the "+" button another UIViewController (AddViewContronller) 
    is pushed 
2.-In that view I present a few UITextfields to be filled. 
3.-I press a "save" button on the NavigationBar, that button save info 
    into the DB and then it goes back the FirstViewController, popping the current 
    UIViewController(AddViewController) 
4.-FirstViewController and its tableView is on the main screen again, however 
    the rows are still the same. 

J'ai essayé de mettre à jour le FirstViewController lorsque j'appuie sur le bouton Enregistrer dans AddViewController, mais comme je le disais, je suis échoué. L'option que je n'ai pas essayée est de libérer le FirstViewController quand je saute à un autre UIViewController, puis de le réallouer à l'arrière, mais je ne pense pas que ce soit une bonne idée d'utiliser le NavigationController. contrôleurs qui sont dans la pile.

Donc, quelqu'un sait ce que je dois faire pour actualiser/recharger un View (UIViewController) d'un autre UIViewController, dans mon cas mettre à jour la vue FirstViewController de AddViewController?

En outre, je voudrais entendre si je suis dans la bonne voie? ou ce que je veux faire peut être facilement fait avec une autre approche comme un dialogue modal?

Toute aide, il sera très reconnaissants

acclamations, Raul

+0

Utilisez-vous NSFetchedResultsController pour remplir votre affichage table avec des données? – an0

+0

non, je viens de créer une méthode pour récupérer les données et j'ai pensé à appeler chaque fois que j'ai besoin de mettre à jour le TableView. Je l'ai fait parce que je ne savais pas à propos de NSFetchResultsController ... maintenant d'avoir un coup d'oeil rapide dans cela, il semble que le chemin à parcourir .. – rhormaza

Répondre

0

Tout d'abord, si vous n'êtes pas familier avec UITableView, vous devriez lire Table View Programming Guide for iOS.

Et si vous utilisez des données de base pour remplir votre UITableView, vous devez presque toujours utiliser NSFetchedResultsController.

1

Vous pouvez essayer de gérer la notification NSManagedObjectContextObjectsDidChangeNotification. Par exemple:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(dataDidChange) 
               name:NSManagedObjectContextObjectsDidChangeNotification 
               object:nil]; 
} 

- (void)dealloc { 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                name:NSManagedObjectContextObjectsDidChangeNotification 
                object:nil]; 
} 

- (void)dataDidChange { 
    [self.tableView reloadData]; 
} 
Questions connexes