Ios 如何在Swift中通过AppDelegate设置变量值?

Ios 如何在Swift中通过AppDelegate设置变量值?,ios,swift,Ios,Swift,我在Main.storyboard中设置了UIViewController,并将其标识符设置为settings。我引用Main.storyboard并在AppDelegate中获取视图控制器,然后设置位于视图控制器中但返回nil的变量的值 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)

我在
Main.storyboard
中设置了
UIViewController
,并将其标识符设置为
settings
。我引用
Main.storyboard
并在
AppDelegate
中获取视图控制器,然后设置位于视图控制器中但返回nil的变量的值

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
}
设置ViewController
中有以下变量:

var moc: NSManagedObjectContext!

我确认我能够获取
Main.storyboard
SettingViewController
persistentContainer.viewContext
具有值。

您正在成功实例化一个新的设置
UIViewController
,但此后它不会发生任何变化。稍后,您的应用程序将通过情节提要创建一个设置viewController,但这将是另一个设置


更好的方法是为viewController创建一个可访问的位置,以便访问
moc
变量,而不是尝试提前传递它。如果您让Xcode创建具有CoreData设置的项目,通常可以完成此操作。您可以从应用程序中的任何viewController中说
(UIApplication.shared.delegate as!AppDelegate).managedObjectContext
,并获取指向该
moc

的指针。您正在成功实例化一个新设置
UIViewController
,但之后它不会发生任何事情。稍后,您的应用程序将通过情节提要创建一个设置viewController,但这将是另一个设置


更好的方法是为viewController创建一个可访问的位置,以便访问
moc
变量,而不是尝试提前传递它。如果您让Xcode创建具有CoreData设置的项目,通常可以完成此操作。您可以从应用程序中的任何viewController中说
(UIApplication.shared.delegate as!AppDelegate)。managedObjectContext
,并获取指向该
moc

的指针。删除
作为UIViewController?
您不需要它。只需写下:如果let
settingViewController=mainStoryboardIpad.instanceeviewcontroller(标识符为“settings”)作为settingViewController
@Honey
无法在强制中将“UIViewController”类型的值转换为“SettingsViewController?”类型
My bad。您应该使用
作为?SettingViewController
FYI,
如果让SettingViewController=MainstryBoardiPad.InstanceEviewController(带标识符:“设置”)作为?设置ViewController{
会更好。删除作为UIViewController的
吗?
您不需要它。只需写:如果让
SettingViewController=mainStoryboardIpad.instanceeviewController(带有标识符:“设置”)as SettingViewController
@Honey
无法将强制中“UIViewController”类型的值转换为“SettingsViewController?”类型。您应该使用as?SettingViewController
FYI,
如果让SettingViewController=mainStoryboardIpad.InstanceVIEWCONTROLLER(带有标识符:“设置”)as?设置视图控制器{
会更好。