Wie lade ich eine TableView neu, nach dem Beenden eines ModalView

avarobot

Golden Delicious
Registriert
09.04.12
Beiträge
9
Hallo,

ich bin gerade dabei IOS-Programmierung zu lernen und bin leider auf ein Problem gestoßen. Ich hoffe, ihr könnt mir dabei weiterhelfen:

Und zwar möchte ich durch ein PLUS-Button ein ModalView anzeigen, damit man Daten eingeben kann und nach dem der FERTIG-Button geklickt wird, soll diese Daten gespeichert und in ein TableView angezeigt werden.
Das Speichern von Daten hat zwar funktioniert, aber die Tabelle lädt sich nicht neu. (Man muss dabei das App manuell neu starten und das möchte ich nicht!)

Meine Frage ist daher: wo soll ich [tableView reloadData] hin schreiben, damit die Tabelle sich neu ladet nach dem der Nutzer auf FERTIG-Button geklickt hat?

FERTIG-Button geklickt:
Code:
- (IBAction)doneEingabeBarButton:(id)sender{
    AppDelegate *unserDelegate = [[UIApplication sharedApplication] delegate];
    Buch* neueBuch = [NSEntityDescription insertNewObjectForEntityForName:NSStringFromClass([Buch class]) inManagedObjectContext:unserDelegate.managedObjectContext];
    neueBuch.buchname = self.buchnameUITextFieldOutlet.text;
    
    [unserDelegate saveContext];
    
    [self dismissViewControllerAnimated:YES completion:nil];
}

TableView.m Datei:
Code:
@interface BuchTableViewController ()
@property (nonatomic, strong) NSFetchedResultsController *fetchedResultsController;
@end
@implementation BuchTableViewController

- (NSFetchedResultsController *)fetchedResultsController
{
    if (_fetchedResultsController) {
        return _fetchedResultsController;
    }
    AppDelegate * unserDelegate = [[UIApplication sharedApplication] delegate];
    
    
    NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@"Buch"];
    request.fetchBatchSize = 64;
    
    NSSortDescriptor * sortierung = [NSSortDescriptor sortDescriptorWithKey:@"buchname" ascending:YES];
    request.sortDescriptors = @[sortierung];
    
    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:unserDelegate.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
    
    NSError * fehler;
    [_fetchedResultsController performFetch:&fehler];
    if (fehler) {
        NSLog(@"Hier gibt es ein Fehler: %@", [fehler userInfo]);
    }
    return _fetchedResultsController;
}
- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
    }
    return self;
}
- (void)viewDidLoad
{
    [super viewDidLoad];      
}


- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}


#pragma mark - Table view data source


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.fetchedResultsController.sections.count;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    id<NSFetchedResultsSectionInfo> sectionInfo = self.fetchedResultsController.sections [section];
    return [sectionInfo numberOfObjects];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"BuchCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    
    // Configure the cell...
    Buch * buch = [self.fetchedResultsController objectAtIndexPath:indexPath];
    cell.textLabel.text = buch.buchname;
    
    return cell;
}

Ich bedanke mich schon mal für eure Hilfe

Viele Grüße
 
Da gibt es viele Möglichkeiten. Man könnte das an das Ende von -doneEingabeBarButton: unterbringen, oder in den completion-Block von -dismissViewControllerAnimated:completion:.

Eine andere Alternative wäre, mit KVO und Bindings zu arbeiten, dann aktualisiert sich die Tabelle selbst und man braucht sich um solche Sachen gar nicht zu kümmern.
 
Erstmal danke für deine Antwort!

Da gibt es viele Möglichkeiten. Man könnte das an das Ende von -doneEingabeBarButton: unterbringen, oder in den completion-Block von -dismissViewControllerAnimated:completion:.

Ich habe es versucht, aber es will irgendwie nicht funktionieren. Kannst du mir bitte zeigen wie du es machen wurdest? (also wie so ein Code ausschauen könnte)

Danke im Voraus
Viele Grüße
 
Du kannst mal versuchen den reload der TableView in

viewDidAppear: oder viewWillAppear:

durchzuführen. Diese Methode sollte ja durchlaufen werden wenn der TableView Controller wieder angezeigt wird.