• Wieder einmal haben uns unsere Apfeltalker tolle Fotos zur Abstimmung eingesandt. Welches ist Euer Favorit? Stimmt mit ab! Hier geht es zur Abstimmung --> Klick
  • Es ist bereits Apfeltalk-Tradition und wir möchten sie auch in diesem Jahr fortsetzen: Unser Apfeltalk-Weihnachtslogo-Wettbewerb hat begonnen! Gestaltet für uns das Weihnachtsbanner, das im Monat Dezember bis zum Weihnachtsfest unsere Webseite schmücken soll. Lasst Eurer Kreativität freien Lauf! Hier geht es zum Wettbewerb --> Klick

TableViewController lädt Daten nach ändern/hinzufügen/löschen nicht

Master123of

Süsser Pfaffenapfel
Registriert
12.01.11
Beiträge
668
Hallo zusammen,

ich bin Anfänger in Sachen iOS Entwicklung (habe bisher mit C# entwickelt). Hoffe ihr könnt mir weiter helfen ich hab schon ganz Google abgesucht :)

Zur Erläuterung hier mal mein Storyboard:

Bildschirmfoto%202014-02-03%20um%2023.10.17.png


Ich gehe also von einem Hauptmenü (Test) in ein TableView (Table) und habe dort eine Detail Ansicht namens Subject.

Die Daten verwalte ich mit einer xcdatamodeld-Datei.

Wenn ich nun Einträge in "Subject" hinzufüge oder verändere und daraufhin wieder "Table" angezeigt wird, ist die Liste immer veraltet. Die Einträge aktualisieren sich erst wenn ich zurück ins Hauptmenü gehe und dort noch einmal "Table" aufrufe.

[self.tableViewreloadData]; wird in der viewDidLoad aufgerufen, das nützt aber leider nichts. Ich habe auch schon andere Methoden versucht um sie aufzurufen aber es klappt einfach nicht, im Debugger geht er sogar zu der Zeile.

Hier ein Auszug aus meinem Code, falls das etwas bringt:

Code:
@interface SubjectsViewController ()

@property (nonatomic,strong)NSArray* fetchedRecordsArray;

@end

@implementation SubjectsViewController

- (id)initWithStyle:(UITableViewStyle)style
{
    self = [super initWithStyle:style];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
        [super viewDidLoad];
        [self.tableView clearsContextBeforeDrawing];
        AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
        self.fetchedRecordsArray = [appDelegate getAllSubjects];
        [self.tableView reloadData];
}

...

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Subjects * subject = [self.fetchedRecordsArray objectAtIndex:indexPath.row];
    UITableViewCell * cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Foobar"];
  
    cell.selectionStyle = UITableViewCellSelectionStyleBlue;
    cell.textLabel.text = [NSString stringWithFormat:@"%@", subject.name];

    return cell;
}

...

Wäre echt super wenn mir jemand sagen kann was ich falsch mache. Vielen Dank im Voraus.

Gruß

Master123of

EDIT: Hier ein kleines Video welches das Problem verdeutlicht: https://dl.dropboxusercontent.com/u/2228496/TableView.mov
 
Zuletzt bearbeitet:
ViewDidLoad wird nicht aufgerufen. Du bist ja in einem NavigationController und der vorherige ViewController mit View existiert noch.
Versuche mal viewWillAppear:animated.
 
Hallo frostdiver,

Vielen Dank für die schnelle Antwort! Jetzt klappt es beim ändern von Daten aber beim hinzufügen bleibt die Tabelle immer noch beim alten und beim Löschen schreibt er "(null)" anstelle des gelöschten DS.

Code:
- (void)viewWillAppear:(BOOL)animated{
    [self.tableView reloadData];
}

Gruß

Master123of
 
Erneuerst du auch dein fetchedRecordsArray? Vielleicht solltest du die Daten im Model lassen. Dann musst du nicht aufpassen, dass alles gesynct ist.
 
Wie kann ich das erneuern? Muss ich das in der Detail Ansicht oder der Table View machen?
 
Ahh vielen Dank, genau das war es. Klappt jetzt alles wie gewünscht.

Gruß

Master123of
 
  • Like
Reaktionen: lx88