Ich habe eine Ansicht in meiner App, die ein UITableView anzeigt. Diese Ansicht wird in einer NIB-Datei erstellt und verfügt über einen benutzerdefinierten Ansichtscontroller. Die UIViewController-Unterklasse für diese Sicht fungiert als Datenquelle und Delegat für UITableView.UIViewController -dealloc wird nach dem Beenden des Modal View-Controllers aufgerufen
Mein UITableView zeigt mehrere Zeilen basierend auf meinen Daten an. Dann zeigt die letzte Zeile einen anderen Text an: "Add another ...". Wenn die letzte Zeile ausgewählt ist, präsentiere ich einen Modal-View-Controller (damit der Benutzer weitere Daten hinzufügen kann). Wenn ich den Modalansicht-Controller verwarne, sehe ich wieder die ursprüngliche Ansicht (wie erwartet) und alles scheint gut zu sein. Wenn ich jedoch versuche, mit dieser Ansicht zu interagieren, stürzt die App ab.
Durch das Platzieren mehrerer NSLog() - Anweisungen über den UIViewController (für UITableView) habe ich festgestellt, dass die Methode -dealloc direkt nach dem Schließen der modalen Ansicht aufgerufen wird. Dies erklärt den Absturz, wenn ich versuche, etwas mit dieser Ansicht zu tun. Ich habe jedoch keine Ahnung, warum -dealloc auf diesem View-Controller aufgerufen wird.
die Modal-View-Controller zu schließen, die ich habe:
[self dismissModalViewController:YES];
Da der Code in einem IBAction Verfahren in der UIViewController der Steuerung Ansicht modal. Diese Aktion ist an eine Abbrechen-Schaltfläche in der entsprechenden NIB-Datei gebunden.
Darüber hinaus ist mein Verständnis von der View Controller Programming Guide, dass es in Ordnung ist, den modalen Controller von sich selbst zu entlassen, aber es ist robuster Delegaten zu verwenden. Ich benutzte anfangs einen Delegaten, nahm aber den Delegierten heraus, um das Debuggen zu vereinfachen. Ich setze gerade den Delegierten zurück, um zu überprüfen, und das gleiche Verhalten tritt auf, wenn Delegierte verwendet werden. Die Aktionsmethode modale Controller-Anrufe als implementiert:
[[self delegate] myModalViewController:self didAddObject:obj];
Der Delegierte Implementierung in der übergeordneten View-Controller ist:
[self dismissModalViewController:YES]
Wenn jemand dies vor oder gesehen hat, hat irgendwelche Vorschläge, was geschehen könnte oder Wie das zu debuggen, würde ich sehr schätzen.
Sie meinen, dass der Eltern-View-Controller derjenige ist, der freigegeben wird? – BoltClock
Ja, das stimmt. – jmac