我有一个应用,其主视图是UITabBarController
子类,其中包含NSPersistentContainer
。
TabBarController提供的某些UIView
子类需要能够访问NSPersistentContainer
。这些UIView
子类大多嵌入UINavigationController
中。
为了便于检查哪个需要NSPersistentContainer
,我创建了一个名为NeedsContainer
的协议,并使相应的UIView
子类符合该协议。
我抓住了viewController
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController){
检查它是否为UINavigationController
,如果是{I},请询问.topViewController
并检查其是否符合NeedsContainer
。如果是这种情况,我会注入NSPersistentContainer
。
直到......才能正常工作。
我现在有更多场景,而不适合tabBar溢出到moreNavigationController
。
这里有一些代码,附有打印语句,以帮助我调试最新情况
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController){
print("\ntab selected****************************************")
print("ViewController is type :\(type(of: viewController))")
print("****************************************************")
if viewController.isKind(of: UINavigationController.self) {
print("ploughing through")
if let navController = viewController as? UINavigationController {
print ("**it let let navController = viewController as? UINavigationController ")
if var actualViewController = navController.topViewController! as? NeedsContainer {
print("actualView controller is kind of :\(type(of: actualViewController))")
actualViewController.container = container
print("passed in container")
} else {
print("Its not a NeedsContainer , its a \(type(of:navController.topViewController))")
}
}else {
print("it didnt let navController = viewController as? UINavigationController ")
}
}
}
`
点击moreNavigationController
中的一个选项会启动场景,但不会注入NSPersistentContainer
。
当我选择tabBar中的more按钮时,输出会显示输出 ...
tab selected****************************************
ViewController is type :UIMoreNavigationController
****************************************************
ploughing through
**it let let navController = viewController as? UINavigationController
Its not a NeedsContainer , its a Optional<UIViewController>
当我点击moreNavigationcontroller
中的某个选项时,控制台上没有任何内容。 Xcode在新场景中持久容器为零的检查时崩溃。
所以我发现了......
.moreViewController实际上是类型
UIMoreNavigationController
。
UIMoreNavigationController
未记录,但必须是其子类
UINavigationController
因为我的代码通过了
检查。
Xcode会抛出错误,你试着参考
UIMoreNaviagtionController
因此您无法询问是否有类似内容。
点击moreNavigationContoller中的单元格显然没有
致电func tabBarController(_ tabBarController: UITabBarController,
didSelect viewController: UIViewController)
那么,如何从最终在NSPersistentContainer
上的选项中注入moreNavigationController
?
作为一种解决方法而不是我的问题的答案,我在写这篇文章时意识到需要NSPersistentContainer
的类可以访问他们的.tabBarController
属性并返回到它并抓住{{1 }}。这是有效的,我已经尝试过了,但与从persistentContainer
子类中注入依赖项相比,这似乎是错误的方法。