2 Stimmen

Bevölkerung von DetailController aus UITableViewCell über Segue

Ich fülle Zellen in einem UITableView aus CoreData und habe eine Frage dazu, wie ich am besten die Daten, die ich benötige, an meinen DetailController übertragen kann (d. h. den viewController, der angezeigt wird, wenn die Zelle angetippt wird).

Aktuell verwende ich beim Befüllen der UITableViewCells den übergebenen indexPath, um das entsprechende managedObject aus Core Data abzurufen. Zu diesem Zeitpunkt aktualisiere ich die Zelle nur mit einigen Informationen aus dem verwalteten Objekt (z. B. Name, Alter, Geschlecht).

Nachdem das UITableView vollständig befüllt wurde, möchte ich es den Benutzern ermöglichen, eine UITableViewCell auszuwählen und einen DetailController anzuzeigen, der genauere Informationen enthält (z. B. Name, Alter, Geschlecht, Beruf, Gewicht, Größe usw.) Wenn die Zelle angetippt wird, verwende ich -prepareForSegue um zum neu präsentierten DetailController zu wechseln.

Meine Frage:

Der "Sender" für den Segue ist die UITableViewCell (Subklasse), aber ich habe diese nur mit den Informationen befüllt, die ursprünglich in der kleineren Zelle angezeigt werden sollten. Sollte ich

  1. weitere iVars zur UITableViewCell Subklasse hinzufügen und alle benötigten Daten speichern,
  2. einen Zeiger-iVar auf die Modell-managedObject in der Zelle behalten
  3. etwas anderes, das ich möglicherweise übersehen habe?

5voto

jackslash Punkte 8545

Mit dem Model View Controller-Muster, das wir in Objective-C verwenden, sollten Ihre Ansichten niemals über Ihr Datenmodell Bescheid wissen. Das bedeutet, dass Ihre UITableViewCells keine Eigenschaften haben sollten, die Objekte aus Ihrem Datenmodell speichern. Zellen sollten nur Labels und Ansichten als Eigenschaften haben, die Ihr View-Controller im -tableView:cellForRowAtIndexPath-Methode oder ähnlichen Methoden mit Daten aus dem Modell ausfüllt

Sie erhalten das UITableViewCell-Objekt als Sender in der Vorbereitung für den Übergang. Sie können den Indexpfad für die Zelle mit der folgenden Methode herausfinden:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    NSIndexPath * selectedIndexPath = [self.tableView indexPathForCell:sender];
    ...

Sie können dann diesen Indexpfad verwenden, um Ihr Modellobjekt erneut aus Core Data abzurufen und es als Eigenschaft auf Ihrem nächsten View-Controller zu setzen, oder was auch immer Sie tun müssen, um das Modellobjekt weiterzugeben

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X