Dziwne zachowanie PopViewController
Ze względu na dziwne żądanie, które próbowałem wyłączyć, ale nie zadziałało, musiałem zastąpić przycisk Wstecz nawigacji.
Zrobiłem niestandardową podklasę UINavigationController i zaatakowałem- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item
metoda.
Oto mój kod:
@interface CustomUINavigationController ()
@end
@implementation CustomUINavigationController
#pragma mark - UINavigationBar delegate methods
- (BOOL)navigationBar:(UINavigationBar *)navigationBar shouldPopItem:(UINavigationItem *)item {
if ([[self.viewControllers lastObject] isKindOfClass:[ViewController1 class]]) {
ViewController1 *vc1 = (ViewController1 *)[self.viewControllers lastObject];
[vc1 handleBackAction];
if (vc1.canPopVC == YES) {
[self popViewControllerAnimated:YES];
return YES;
} else {
return NO;
}
}
[self popViewControllerAnimated:YES];
return YES;
}
@end
Wszystko działa dobrze, chyba że programowo poproszę viewController. Aplikacja rozbił się za każdym razem, gdy chciałem wykonać push po wspomnianym popie. ObrócenieNSZombie on
, ujawnił, że po programowym wywołaniu viewController, jego macierzysty kontroler widoku jest zwolniony. W tym momencie utworzenie niestandardowego przycisku BackButton nie jest opcją, ponieważ spowoduje utratę natywnej funkcji przesuwania do systemu iOS 7 na popViewController.
Dziennik awarii:
*** -[ContactsDetailViewController performSelector:withObject:withObject:]: message sent to deallocated instance 0x1806b790