2017-11-30 8 views
0

UIViewControllerMain.storyboardにあり、その識別子はsettingsに設定されています。私はMain.storyboardを参照し、ビューコントローラをAppDelegateにしてから、ビューコントローラ内にある変数の値を設定しますが、nilを返します。SwiftでAppDelegateから変数値を設定する方法は?

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    let mainStoryboardIpad : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    if let settingViewController = mainStoryboardIpad.instantiateViewController(withIdentifier: "settings") as UIViewController? { 
     let settingVC = settingViewController as! SettingViewController 
     settingVC.moc = persistendContainer.viewContext 
    } 

    return true 
} 

そして、私はSettingViewControllerで変数を次のようしている。

var moc: NSManagedObjectContext! 

を私は、私がMain.storyboardを取得することができていていることが確認さSettingViewControllerpersistentContainer.viewContextは値を持っています。

+0

'as UIViewController? 'を削除します。あなたはそれを必要としません。ただ書いてください: 'SettingViewController = mainStoryboardIpad.instantiateViewController(withIdentifier:" settings ")をSettingViewController'としてください。 – Honey

+0

@Honey 'タイプ 'UIViewController'の値を 'SettingsViewController'と入力できません。強制的に ' –

+0

私の悪い。あなたは 'として使用していたはずですか? SettingViewController' – Honey

答えて

2

新しい設定UIViewControllerが正常にインスタンス化されていますが、その後は何も起こりません。後であなたのアプリは、ストーリーボードを介して設定viewControllerを作成しますが、それは別のものになります。

これを行うより良い方法は、viewControllerがmoc変数にアクセスするためのアクセス可能な場所を事前に渡すのではなく作成することです。これは、XcodeでCoreDataを設定してプロジェクトを作成させる場合に通常行われます。あなたのアプリケーションの任意のviewControllerから(UIApplication.shared.delegate as! AppDelegate).managedObjectContextと言うことができ、そのmocへのポインタを取得します。

関連する問題