2012-04-12 6 views
0

hallo ich studiere iOS Programmierungich weiß nicht, warum diese Tabelle View-Code stürzt

ich ein Projekt erstellt, das

eine leere Anwendung ist und ich erstellte Tabelle View-Controller ohne xib Datei.

und i eingefügt Folge Code in didFinishLaunchingWithOptions

TableViewController *tvc = [[TableViewController alloc] init]; 
[self.window addSubView:tvc.view]; 
[tvc release]; 

dieser Code abgestürzt war, als ich nach unten gescrollt. Warum das?

wenn ich diesen Code Kommentar

[tvc release]; 

Programm nicht abstürzt.

Ich habe Dealloc nicht in AppDelegate-Datei geschrieben.

warum ist das ??

Ich glaube, ich Tabelle View-Controller mit alloc erstellt

so Beibehaltungszähler 1.

ist und fügen Sie Teilansicht Fenster und Tisch-View-Controller Beibehaltungszähler 2.

ist so veröffentlichen i Tisch View-Controller

aber es stürzt ab, als ich nach unten scrollte.

ich weiß nicht, warum ..

mir bitte helfen

+1

Es ist benutzerdefiniert, UIWindows Hauptansicht als window.rootViewController festzulegen; nicht als Unteransicht. – CodaFi

Antwort

2

Einfach, Hinzufügen tvc.view als Unteransicht des Fensters verursacht tvc.view beibehalten werden, behält aber tvc sich nicht. Im Wesentlichen wird Ihre TableViewController Instanz ungültig, sobald Sie release darauf aufrufen. Die App stürzt ab, wenn Sie wahrscheinlich einen Bildlauf durchführen, weil die TableViewController-Instanz als Delegat oder Datenquelle für eine UITableView oder UIScrollView oder eine andere mit tvc.view verknüpfte Instanz konfiguriert ist.

Beachten Sie auch, dass die Art, wie Sie die Ansicht anzeigen, nicht die empfohlene Vorgehensweise ist. Wirklich sollten Sie presentModalViewController: oder pushViewController: aufrufen und die TableViewController Instanz übergeben. Dies bewirkt, dass TableViewController so lange beibehalten wird, bis es geschlossen wird, sodass Sie wie in Ihrem Beispielcode release anrufen können.

Oder, da Sie diese Einrichtung manuell als Teil von didFinishLaunchingWithOptions tun, können Sie auch window.rootViewController direkt einstellen, obwohl das wiederum nicht wirklich empfohlen wird. Mit XCode können Sie den Standard-/Stammansicht-Controller der App festlegen und ihn beim Start der App automatisch einrichten.

+0

danke. ich habe es!! – MoonSoo

0

Eigentlich haben Sie nur die Aussicht allein hinzugefügt. So wird die Ansicht allein beibehalten. Der Viewcontroller wird freigegeben. Der Viewcontroller muss jedoch die Datenquelle und der Delegate für die Tabellenansicht sein. Seit der Zuordnung wurde diese Datenquelle nicht mehr gültig und stürzt ab.

+0

danke für deine antwort – MoonSoo

Verwandte Themen