簡體   English   中英

iOS - 從appDelegate訪問storyboard上的viewControllers

[英]iOS - Accessing viewControllers on storyboard from appDelegate

我有一個使用Core Data的應用程序,我在app delegate中創建了一個managedObjectContext

我想將該managedObjectContext傳遞給我的故事板上的兩個視圖控制器,以便它們使用相同的managedObjectContext來保存和獲取。

我可以訪問第一個視圖控制器:

self.window.rootViewController

但是我要訪問的第二個視圖控制器是在第一個視圖之后從第一個視圖中返回,並且沒有從它返回引用。

我試過了:

instantiateViewControllerWithIdentifier:

但是這會創建一個新的視圖實例,而不是允許我訪問在segue之后出現的第二個視圖控制器。

所以我的問題是,如何訪問第二個視圖控制器?

或者(因為我對此非常陌生)是否有更好的方法來管理/傳遞視圖控制器之間的數據?

提前致謝。

或者(因為我對此非常陌生)是否有更好的方法來管理/傳遞視圖控制器之間的數據?

這取決於你試圖傳遞的數據。 在這種情況下,您希望為視圖控制器提供對Core Data托管對象上下文的訪問權限。 因為這是您在應用程序的整個生命周期中所需要的,所以讓視圖控制器通過您的應用程序委托訪問它會更好。

您可以通過[[UIApplication sharedApplication] delegate]執行此操作 - 但是,您可能需要對其進行類型轉換以避免編譯器警告,或者您可能需要創建一個返回托管對象上下文的宏以節省您的時間並使您的代碼成為更具可讀性。

如果您在創建項目時告訴XCode您想要使用Core Data,那么您應該擁有在應用程序委托中檢索對象上下文的方法。 如果沒有,你需要創建它們。

要創建一個宏以節省您每次需要訪問托管對象上下文時必須寫出[[UIApplication sharedApplication] delegate] ,請查看以下答案: [[UIApplication sharedApplication]委托]的簡寫?

你可以通過這個: -

  UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
  MasterViewController *result;

//check to see if navbar "get" worked
   if (navigationController.viewControllers) {

//look for the nav controller in tab bar views 
      for (UINavigationController *view in navigationController.viewControllers) {

    //when found, do the same thing to find the MasterViewController under the nav controller
         if ([view isKindOfClass:[UINavigationController class]])
             for (UIViewController *view2 in view.viewControllers) 
                 if ([view2 isKindOfClass:[MasterViewController class]])                    
                     result = (MasterViewController *) view2;


      }
   }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM