2011-01-08 3 views
1

Hallo ich will, war Anwendung Hexe hat eine Root-Template-Ansicht mit einem schönen Logo oben oder etwas adn Lesen andere Ansichten knapp unterZwei Ansicht App mit Root-Template Ansicht

(hier ist das, was ich habe jetzt zu tun ist: Test App )

Aber ich habe ein kleines Problem. Wenn ich auf der Linie einen Kommentar in der Datei TestAppDelegate.m entfernen werden 58

//[currentView release]; 

Die Anwendung wird mit Bündel von Fehlern abstürzen, wenn ich versuche, Ansichten zu wechseln. Aber wenn ich diese Zeile kommentieren, sagt Project Analyzer mir, dass ich ein potentielles Leck mit currentView Variable habe.

Kann jemand etwas Zeit sparen und in diesem Code sehen, was ich falsch gemacht habe?

+0

Wie erstellen Sie * currentView *? Ordnen Sie es zu? – EmptyStack

Antwort

0

Das Problem ist, dass man nur hinzufügen currentView.view als Subview, so dass an anderer Stelle zurückgehalten wird, aber currentView selbst nicht. Das heißt, wenn Sie es freigeben, wird es folglich freigegeben und seine Ansicht wird Schwierigkeiten haben, ohne es zu arbeiten.

Eine Lösung wäre, currentView als Instanzvariable zu haben und eine Eigenschaft dafür zu erstellen, damit die Speicherverwaltung für Sie erledigt wird. Hierdurch wird die durch alte Ansicht Controller

@property (nonatomic, retain) UIViewController *currentView; 

und dann eine Zeile wie

currentView = [[First alloc] initWithNibName:@"First" bundle:nil]; 

mit

self.currentView = [[First alloc] initWithNibName:@"First" bundle:nil]; 

ersetzen, bevor die neuen Halt. Dann vergessen Sie nicht, currentView in der dealloc Methode der Klasse freizugeben.

+0

Danke für eine schnelle Antwort. Ja, es funktioniert gerade. – Tieman

0

Ich habe eine Funktion, und es sieht wie folgt aus:

- (void) switchView: (int) viewType { 

for (UIView *view in [self.viewController.rootView subviews]) { 
    [view removeFromSuperview]; 
} 

UIViewController *currentView = nil; 

switch (viewType) { 
    case 1: 
     currentView = [[First alloc] initWithNibName:@"First" bundle:nil]; 
     break; 

    case 2: 
     currentView = [[Second alloc] initWithNibName:@"Second" bundle:nil]; 
     break; 

} 

[self.viewController.rootView addSubview: [currentView view]]; 
[self.window makeKeyAndVisible]; 

//[currentView release]; 

}

+0

Fügen Sie das nicht als Antwort hinzu. Sie können Ihre Frage über den Link am Ende Ihrer Frage bearbeiten. – EmptyStack

+0

Entschuldigung dafür :( – Tieman