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?
您不需要它。只需写下:如果letsettingViewController=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?设置视图控制器{
会更好。