Frage

habe ich eine Navigation basierend iPhone App. Wenn Sie auf einer Zelle in der Tableview drücken wird ein neuer UIViewController mit dem Navigationsstapel geschoben. In diesen View-Controller ich eine benutzerdefinierte Titleview in der viewDidLoad Methode setze:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Setup custom navigation title
    [self setTitle:@"Mediaportal"];
    navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];
    [navItem setTitle:[theServer name]];
    [navItem setSubTitle:@""];
    [self.navigationItem setTitleView:navItem.view];

…
}

Wenn ich zum RootViewController zurückschalten:

[self.navigationController popToRootViewControllerAnimated:YES];

Die App stürzt mit dem folgenden Fehler (NSZombieEnabled = YES):

*** -[CALayer retain]: message sent to deallocated instance 0x5a5fd80

Von dem, was ich die RootViewController sieht immer noch versucht, die benutzerdefinierte Titleview zugreifen zu können, die mit dem zweiten View-Controller freigegeben wurden. Sobald ich die benutzerdefinierte Titleview Teil in meinem Code kommentieren Sie die App funktioniert. Ich versuchte, die navigationItem.titleView auf Null zu setzen (wie in dem Apfel docs gefunden) vor dem zweiten Viewcontroller wird aufgehoben, aber das hilft nicht.

Haben Sie einen Tipp, was ich tun kann, diesen Absturz zu verhindern?

Danke, Mark.

War es hilfreich?

Lösung 2

Ich fand schließlich die Lösung für sie (ein ganz einfaches). Ich muss alloc und init den navItem durch seine Eigenschaft dann beibehalten wird:

self.navItem = [[NavigationBarTitleItemViewController alloc] initWithNibName:@"NavigationBarTitleItem" bundle:nil];

Andere Tipps

Ich hatte den exakt gleichen Fehler einen Monat oder so vor, genau die gleiche Situation. Es trieb mich NUTS.

entdeckte ich, dass die Viewcontroller auch ich popping hatte überhaupt nicht freigegeben worden. Ich hatte eine benutzerdefinierte UIButton Unterklasse jedoch zu dieser Ansicht hinzugefügt, die freigegeben worden war, als die zweite Ansicht geschoben worden war. Also, wenn wieder knallt, war die UIButton nicht da.

Überprüfen Sie die Ansicht, die Sie zurück zu tauchen, um sicherzustellen, Sie haben alle Klassen nicht bekommen, dass Sie das Aufheben von Zuweisungen oder Autoreleased werden, ohne dass Sie wissen.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top