[Erledigt] TableView aktualisiert sich nicht

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • [Erledigt] TableView aktualisiert sich nicht

    Hallo,

    Ich weiß nicht wieso und ich suche den Fehler schon sehr lange, aber mein TableView will sich einfach nicht aktualisieren, wenn der Controller wieder aufgerufen wird.
    In der Console sehe ich, dass die neuen Daten eingelesen werden, aber dennoch wird der alte Datenbestand angezeigt.
    Ich weiß nicht an was es liegen könnte

    Quellcode

    1. - (void)viewDidLoad
    2. {
    3. [super viewDidLoad];
    4. self.managedObjectContext = [(AppDelegate *) [[UIApplication sharedApplication] delegate] managedObjectContext];
    5. if (managedObjectContext != nil) {
    6. NSLog(@"ist nicht nil");
    7. }
    8. else
    9. {
    10. NSLog(@"Ist nil");
    11. }
    12. NSError *error;
    13. if (![[self fetchedResultsController] performFetch:&error]) {
    14. // Update to handle the error appropriately.
    15. NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    16. exit(-1); // Fail
    17. }
    18. }
    19. - (NSFetchedResultsController *)fetchedResultsController {
    20. if (_fetchedResultsController != nil) {
    21. return _fetchedResultsController;
    22. }
    23. NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    24. NSEntityDescription *entity = [NSEntityDescription
    25. entityForName:@"TrimmModelDetails" inManagedObjectContext:managedObjectContext];
    26. [fetchRequest setEntity:entity];
    27. NSSortDescriptor *sort = [[NSSortDescriptor alloc]
    28. initWithKey:@"date" ascending:NO];
    29. [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    30. [fetchRequest setFetchBatchSize:20];
    31. NSFetchedResultsController *theFetchedResultsController =
    32. [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
    33. managedObjectContext:managedObjectContext sectionNameKeyPath:nil
    34. cacheName:nil];
    35. self.fetchedResultsController = theFetchedResultsController;
    36. _fetchedResultsController.delegate = self;
    37. return _fetchedResultsController;
    38. }
    39. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    40. {
    41. // Return the number of sections.
    42. return 1;
    43. }
    44. - (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {
    45. TrimmModelDetails *details = [_fetchedResultsController objectAtIndexPath:indexPath];
    46. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    47. [dateFormatter setDateFormat:@"dd.MM.yyyy"];
    48. cell.textLabel.text = details.wind;
    49. cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ ; %@",details.rating,[dateFormatter stringFromDate:details.date]];
    50. }
    51. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    52. {
    53. id sectionInfo = [[_fetchedResultsController sections] objectAtIndex:section];
    54. return [sectionInfo numberOfObjects];
    55. }
    56. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    57. {
    58. static NSString *CellIdentifier = @"Cell";
    59. UITableViewCell *cell =
    60. [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    61. // Set up the cell...
    62. [self configureCell:cell atIndexPath:indexPath];
    63. return cell;
    64. }
    65. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
    66. {
    67. // Navigation logic may go here. Create and push another view controller.
    68. UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    69. DetailViewController *detailviewcontroller = [storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
    70. TrimmModelDetails *details = [_fetchedResultsController objectAtIndexPath:indexPath];
    71. detailviewcontroller.detailItem = details;
    72. // ...
    73. // Pass the selected object to the new view controller.
    74. [self.navigationController pushViewController:detailviewcontroller animated:YES];
    75. }
    76. - (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
    77. // The fetch controller is about to start sending change notifications, so prepare the table view for updates.
    78. [self.tableView beginUpdates];
    79. }
    80. - (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
    81. UITableView *tableView = self.tableView;
    82. switch(type) {
    83. case NSFetchedResultsChangeInsert:
    84. [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
    85. break;
    86. case NSFetchedResultsChangeDelete:
    87. [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    88. break;
    89. case NSFetchedResultsChangeUpdate:
    90. [self configureCell:[tableView cellForRowAtIndexPath:indexPath] atIndexPath:indexPath];
    91. break;
    92. case NSFetchedResultsChangeMove:
    93. [tableView deleteRowsAtIndexPaths:[NSArray
    94. arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    95. [tableView insertRowsAtIndexPaths:[NSArray
    96. arrayWithObject:newIndexPath] withRowAnimation:UITableViewRowAnimationFade];
    97. break;
    98. }
    99. }
    100. - (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id )sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {
    101. switch(type) {
    102. case NSFetchedResultsChangeInsert:
    103. [self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
    104. break;
    105. case NSFetchedResultsChangeDelete:
    106. [self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade];
    107. break;
    108. }
    109. }
    110. - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    111. // The fetch controller has sent all current change notifications, so tell the table view to process all updates.
    112. [self.tableView endUpdates];
    113. }
    Alles anzeigen





    Vielen vielen Dank im Voraus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von BigStorm ()

  • matz schrieb:

    Wird dein FetchRequest überhaupt aufgerufen? Keine Fehlermeldung?

    Ja wird aufgerufen.
    Es kommt keine Fehlermeldung


    MCDan schrieb:


    Wann, wo und wie werden die Daten in TrimmModelDetails denn verändert, damit bei der nächsten Anzeige das ViewControllers auch andere/veränderte Daten angezeigt werden?



    Die Daten werden in einem 2. VC erstellt und abgespeichert
    Wenn dann der TableView VC aufgerufen wird sollen alle Daten geladen werden
  • Dieser 2. ViewController ruft dann TableViewController auf in dem die Daten dann angezeigt werden sollen?

    Oder wird der 2. ViewController vom TableViewController aufgerufen und wenn der 2. ViewController geschlossen wird, soll wieder der TableViewController mit den neuen Daten angezeigt werden?

    Kannst Du evtl. das Projekt oder ein Beispiel-Projekt mit gleichem Aufbau hier posten?
  • Der TableViewController funktioniert wunderbar.

    Das Problem lag in dem ViewController der für die Erstellung neuer Einträge zuständig ist und zwar bei dieser Methode:

    Quellcode

    1. - (IBAction)save:(id)sender {
    2. AppDelegate *appdelegate = [[UIApplication sharedApplication]delegate];
    3. self.managedObjectContext = appdelegate.managedObjectContext;
    4. trimmDetail =[NSEntityDescription
    5. insertNewObjectForEntityForName:@"TrimmModelDetails" inManagedObjectContext:managedObjectContext];
    6. trimmDetail.wind = txtwind.text;
    7. trimmDetail.rating = rating;
    8. trimmDetail.date = [NSDate date];
    9. trimmDetail.waves = txtwellen.text;
    10. trimmDetail.wanten = txtwanten.text;
    11. trimmDetail.vorstag = txtvorstaf.text;
    12. trimmDetail.unterliek = txtunterliek.text;
    13. trimmDetail.kicker = txtkicker.text;
    14. trimmDetail.grossfall= txtgrossfall.text;
    15. trimmDetail.fockschiene = txtfochschiene.text;
    16. trimmDetail.fockcunningham=txtfockvor.text;
    17. trimmDetail.fockachterliek = txtfockachter.text;
    18. trimmDetail.dreieck = txtdreieck.text;
    19. trimmDetail.cunningham = txtdreieck.text;
    20. [self.managedObjectContext save:nil];
    21. if (!newtrimm) {
    22. [managedObjectContext deleteObject:trimmDetail];
    23. }
    24. [self performSegueWithIdentifier:@"close" sender:self];
    25. }
    Alles anzeigen

    Hier steht beim Anlegen eines neues Eintrages newtrimm nicht auf YES, so dass nach dem Erzeugen und Speichern des ManagedObjects dieses gleich wieder über deleteObject: gelöscht wird. ;)