0

ich in Anwendung arbeite, wo ich unten Art von Struktur habenVeröffentlichung Viewcontrollers Verbunden mit UITabBarController mit ARC

-UINavigationController (MAIN NAVIGATION CONTROLLER) 
--UIViewController 
---UITabBarController 
    -- UINavigationController1 
    ---- UITableViewController1 

    -- UINavigationController2 
    ---- UITableViewController2 

    -- UIViewController (Logout Button is in this Controller) 

nun unter Methode, die ich anrufen bin Benutzer Erste Viewcontroller

[self.navigationController popToRootViewControllerAnimated:YES]; 

Hier Selbst Abmelden .navigationController = (HAUPTNAVIGATIONSREGLER)

aber dieser Code funktioniert nicht, er enteignet sich nicht unter den Controllern.

Ich benutze ARC, also kann ich Freigabemethode für alle Controller nicht aufrufen, also wie kann ich das erreichen.

UPDATE

Hier ist meine Push-Code:

//Property Declare in AppDelegate 
@property (nonatomic,weak) UITabBarController *tabBarControllerRef; 

// Below code Written in RootViewController of (MAIN NAVIGATION CONTROLLER) 
-(void)moveToContentScreen { 
AppDelegate *delegateRef = (AppDelegate *) [UIApplication sharedApplication].delegate; 
delegateRef.tabBarControllerRef = [self.storyboard instantiateViewControllerWithIdentifier:@"tabbarReference"]; 
if (delegateRef.tabBarControllerRef) { 
    [self.navigationController pushViewController:delegateRef.tabBarControllerRef animated:YES]; 
} 
} 
+0

Was ist mit der Registerkarte Controller? Ist es "dein"? Wenn nicht, machen Sie einen Referenzzyklus. – rmaddy

+0

es auch nicht freigeben –

Antwort

0

Was an Sicherheit grenzender Wahrscheinlichkeit wird hier passiert ist, dass Sie eine starke Referenzzyklus haben; zwei (oder mehr) Objekte, von denen jedes einen starken Bezug auf die anderen in einem Zyklus hat, so dass keiner von ihnen gelöscht werden kann. Hat der UITabBarController beispielsweise eine starke Referenz auf seine umschließende Ansicht? Wenn ja, machen Sie mindestens eine der Referenzen schwach, um den Zyklus zu unterbrechen.

Wenn in der Übersicht nicht ersichtlich ist, welche Objekte sich zyklisch gegenseitig referenzieren, können Sie mithilfe von Instrumenten versuchen, sie zu finden. Es gibt an excellent tutorial here, die "Strong Reference Cycles" Abschnitt diskutiert ziemlich genau diese Art von Problem.

+0

Wie kann ich uitabbarcontroller Referenz schwach machen, wie ich von MainNavigationController –

+0

Push Wenn Sie es drücken, ordnen Sie es an diesem Punkt zu einer Eigenschaft? Sie sind standardmäßig stark, sodass die Eigenschaftsdeklaration schwach sein muss. Zeigen Sie uns den Code, den Sie verwenden, um die Controller auf 'self.navigationController' zu schieben, dann könnten wir wahrscheinlich sehen, was nicht stimmt. –

+0

Bitte überprüfen Sie meine Änderungen in Frage –

0

Wie stellt die Wurzel UIViewController die UITabBarController dar? Kind/Elternteil? Wenn ja, sieht es so aus, als ob der erste UIViewController View-Controller immer noch einen Verweis auf die UITabBarController enthält. Aus Ihrem Diagramm sieht es so aus, als hätte der ursprüngliche UINavigationController nur einen geschobenen UIViewController, der Root-One.

+0

PLZ Kasse meine Bearbeitungen –

+0

Gibt es eine Notwendigkeit, eine Eigenschaft für den 'UITabBarController' zu haben? Die Verwendung von öffentlichen Eigenschaften für den globalen Zugriff auf "UIApplicationDelegate" ist eine schlechte Vorgehensweise.Versuchen Sie, den 'UITabBarController' lokal zu erstellen und ihn zu drücken. – bsmith11

+0

UITabBarController * controllerRef = [self.storyboard instantiateViewControllerWithIdentifier: @ "tabbarReference"]; if (controllerRef) { [self.navigationController pushViewController: controllerRef animiert: YES]; } –