【发布时间】:2017-12-31 19:14:17
【问题描述】:
编辑:我的方法偏离了基础。我正在尝试将数据从一个 VC 传递到另一个。源 VC 不受 Tab Bar 控制,因此我无法通过它引用目标 VC。我试图通过 Storyboard 引用目标 VC,但目标 VC 上的数据仍然为零。我正在使用 Core Data 并希望将 ManagedObjectContext 传递给另一个 VC。代码如下:
......
do {
try self.managedObjectContext.save()
appUserID = user.userID!
} catch {
fatalError("Error: \(error)")
}
}
}
self.passManagedObjectContext()
}
func passManagedObjectContext() {
let profileTableViewController = UIStoryboard(name: "Profile", bundle: nil).instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileTableViewController
profileTableViewController.managedObjectContext = self.managedObjectContext
}
I am passing data from the AppDelegate to other ViewControllers by referencing my TabBarViewControllers stack like so:
let tabBarController = window!.rootViewController as! UITabBarController
if let tabBarViewControllers = tabBarController.viewControllers {
let profileNavController = tabBarViewControllers[4] as! UINavigationController
let profileTableViewController = profileNavController.topViewController as! ProfileTableViewController
profileTableViewController.managedObjectContext = context
}
}
.....
结束编辑
我现在正在尝试做同样的事情,但是从一个 ViewController 到另一个通过标签栏访问的 ViewController(没有 segue)。上面的代码不识别window!.rootViewController怎么引用根UITabBarController?
【问题讨论】:
-
您可以使用 segue 跨标签栏的视图控制器共享数据
-
您在 AppDelegate 中的何处/何时尝试执行此操作?
-
@DonMag 我之前从 AppDelegate 传递了数据,并试图在 VC 之间使用相同的方法它们不是同一个导航堆栈的一部分,我无法通过标签栏做到这一点,所以我正在尝试通过故事板。谢谢。
-
@MartinMuldoon - 你可能让window!、rootViewController、UITabBarController、传递数据等等变得复杂……而不是考虑你是什么真的很想做。我怀疑你想要做的是
access ManagedObjectContext from multiple viewcontrollers?如果是这样,请尝试搜索 that。您可能会发现一种更简单、更灵活的方法。 -
@DonMag.. 是的。在截止日期前赶时间。没有捷径。
标签: ios swift swift3 uiviewcontroller uitabbarcontroller