0

このコードは、私が求めていることを示しています:

rootViewControllerと の2 つの画面を持つ単純なアプリの場合TableViewController、は のrootVCインデックス [0] にnavigationControllerあり、次のビューはインデックスを 1 ずつ増やします。

import UIKit
import CoreData

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        let navController = self.window?.rootViewController as! UINavigationController
        let firstViewController = navController.viewControllers[0] as! firstViewController
        firstViewController.managedObjectContext = self.managedObjectContext

        return true
    }

今、私はの背後にあるViewControllersに渡そうとmanagedObjectContextしています:appDelegaterootViewController

中央のビューはです。次に、その上下の画面rootViewControllerに渡したいと思います。managedObjectContext

appDelegateからにrootViewController渡し、次に から次のビューに渡そうとしrootViewControllerましたが、うまくいきません。

同じビューに続くビューのインデックス番号を知る方法を教えてください。ありがとうございました!

4

2 に答える 2

0

保存されているプロパティを取得するためだけに、ビューコントローラーまたはその他のオブジェクトからアプリデリゲートを取得することは悪い習慣と見なされているため、上記の回答にはまったく同意しません。

できることは、依存性注入の概念を使用してprepareForSegue、セグエを実行している場合はメソッドを使用してビュー階層を下に移動するときに、ビュー コントローラーに沿って managedObjectContext を渡すか、インスタンス化してプッシュしている場合は次のビュー コントローラーに割り当てることです。プログラムでナビゲーション スタックに追加します。

    // App delegate: - didFinishLaunchingWithOptions
    let navCon = window?.rootViewController as? UINavigationController
    let rootVC = navCon?.viewControllers.first as? firstViewController
    rootVC?.managedObjectContext = managedObjectContext

    // FirstViewController: - Using segue
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
      guard let identifier = segue.identifier else { return }
      switch identifier {
      case "SecondView":
        let navCon = segue.destinationViewController as? UINavigationController
        let controller = navCon?.topViewController as? SecondViewController
        controller?.managedObjectContext = self.managedObjectContext
      default:
        break
      }
    }

    // FirstViewController: - Pushing programmatically 
    let controller = SecondViewController()
    controller.managedObjectContext = self.managedObjectContext
    navigationController?.pushViewController(controller, animated: true)
于 2016-05-22T04:50:08.407 に答える