2010-12-25 15 views
0

Ich habe eine App erstellt, mit der Benutzer Informationen hinzufügen können (von einem addViewController), die dann in einer UITableView auf dem rootViewController angezeigt werden. Wenn der Benutzer auf die TableViewCell tippt, zeigt der detailViewController dann, Sie haben es erraten, weitere Details in Bezug auf die eingegebenen Benutzerinformationen. Was ich versuche zu erreichen ist, einen EditViewController einzurichten, mit dem Benutzer Informationen bearbeiten können, die sie bereits gesendet haben.Default update detailViewController

Derzeit versuche ich, den editViewController mit den Informationen zu füllen, die zuvor vom Benutzer gesendet wurden (danach können sie die Informationen speichern und aktualisieren). Ich bleibe jedoch stecken und versuche, dieses Auto-Popuping durchzuführen, und ich bin mir nicht sicher, ob dies der beste Weg ist, dies zu erreichen.

Hier ist die Edit-Methode, die aufgerufen wird, um den editViewController aus dem detailViewController zu laden.

Also hier versuche ich die Informationen aus einem gespeicherten Array, das in meinem rootViewController deklariert ist, zu laden.

Irgendwelche Gedanken irgendwelche Körper?

Antwort

0

Erstellen Sie Eigenschaften in Ihrer Bearbeitungsansicht mit Retain, und bearbeiten Sie dann den Wert. Bewahren Sie nur auf und verweisen Sie auf das ursprüngliche Objekt. Der setText im Textfeld erstellt nur eine neue Kopie Ihrer Zeichenfolge. Wenn Sie dies tun möchten, können Sie ein Delegate-Protokoll in der Bearbeitungsansicht erstellen und den aktuellen Navigationscontroller festlegen, der Ihre Bearbeitungsansicht als Delegat Ihrer Bearbeitungsansicht darstellt. Und in Ihrer Bearbeitungsansicht wird er nicht mehr die Delegate-Methode aufrufen.

Delegierter doc here

deklarierte Eigenschaft doc here

Viel Glück.

0

gut ...

NSInteger styleRows = [rvc.scoreTypeArray objectAtIndex:indexPath.row]; 

Das ist falsch, weil Sie versuchen, indexPath.row zuzugreifen, die nicht innerhalb dieser Methode definiert ist. IndexPath.row wird in der Regel innerhalb von den Methoden des Tableview verwendet wie

(tableView*)didSelectRowAt:(NSIndexPath*)indexPath 

So werden Sie den Wert indexPath.row aus dem Tableview des delegatemethods als Parameter in editDetails Methode übergeben müssen.

aber Sie nicht eigentlich diese brauchen ... diese stattdessen tun:

in detailViewController und editViewController, eine NSString *dateObject erstellen und von @property(nonatomic,assign). Jetzt ist in Ihrem Root-Viewcontroller didSelectRowAtIndexPath, machen, wenn der Benutzer tippt die Zeile,

[dvc setDateObject:self.dateArray objectAtindex:indexPath.row]; 

jetzt enthält die detailViewController einen Verweis auf das ursprüngliche Datum im DateObject. Jede Änderung, die Sie hier vornehmen, ändert auch das Datum im rootViewController dateArray.

Also, wenn die Anwendung auf die Schaltfläche Bearbeiten tippt, rufen Sie die

-(IBAction)editDetails:(id)sender { 

    editViewController *evc = [[editViewController alloc] initWithNibName:@"editViewController" bundle:nil]; 

    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:evc]; 
    [evc setDateObject:self.dateObject]; 
    [[self navigationController] presentModalViewController:navigationController animated:YES]; 

    [navigationController release]; 
    [evc release]; 

} 

Jetzt haben Sie wieder auf dem ursprünglichen dateObject zum editViewController geben. Setzen Sie in seiner viewDidLoad das textField, und ersetzen Sie das dateObject in editViewController mit dem modifizierten dateObject, wenn der Benutzer bearbeitet und done abgeschlossen hat. Denken Sie daran, dies ist das ursprüngliche dateObject, das als Referenz von rootViewController übergeben wurde. also hast du es dort auch im dateArray von rootViewController ersetzt. Jetzt müssen Sie nur wissen, wann Sie von detailViewController zu rootViewController zurückkehren und eine [table reloadData];

tadan !!!

+0

Wenn ich baue bekomme ich diese Warnung. Die Dinge laufen, aber nichts geht von Sicht zu Sicht und es stürzt schließlich ab. Warnung: 'detailViewController' reagiert möglicherweise nicht auf '-setDataObject: objectAtindex:' (Bei Nachrichten ohne übereinstimmende Methodensignatur wird davon ausgegangen, dass 'id' zurückgegeben wird und '...' als Argumente akzeptiert wird). – DrBeak1

+0

Ich habe nur kein Glück damit. Ich kann nicht herausfinden, wie man das ursprüngliche Array-Objekt aus einer Zeichenfolge hinzufügt und ersetzt, die nicht in derselben Klasse deklariert ist. Ich kann die Strings aktualisieren (ich verstehe, dass jede Klasse eine eigene Zeichenfolge hat), aber das beeinflusst die Objekte im Array in keiner Weise. Können Sie oder jemand mehr erklären, wie das funktioniert? Vielen Dank:) – DrBeak1

+0

Okay, definierst du eine Variable mit dem Namen dateObject in der Header-Datei? und seine zugehörige Eigenschaft? Sie sollten die Eigenschaft als @property festlegen (nicht atomisch, zuweisen) xxx dateObject; und haben auch ein @ synthesize dateObject in Ihrer .m-Datei –