viewControllerWithRestorationIdentifierPath:coder:如何查找现有实例?

mat*_*att 10 ios uikit-state-preservation

文档viewControllerWithRestorationIdentifierPath:coder:说:

您对此方法的实现应创建(或查找)相应的视图控制器对象并将其返回...并不总是需要在此方法的实现中创建新的视图控制器对象.您还可以返回由其他方法创建的现有视图控制器对象.例如,如果已从故事板文件加载视图控制器,则将返回该对象而不是创建新对象.[我的斜体.]

这对我来说似乎完全是胡说八道.这是一种类方法!我们目前没有任何访问任何实例的权限 - 除非我们创建一个实例.如果有人可以向我解释一个类方法如何找到或知道"已经从故事板文件中加载的视图控制器",我将不胜感激.

编辑:为了获得赏金,您必须向我展示一个实际案例,从您自己的应用程序中,viewControllerWithRestorationIdentifierPath:coder:用于"返回通过其他方式创建的现有视图控制器对象" 的类方法.

aet*_*the 2

我能想到的最常见的例子是应用程序委托拥有的任何视图控制器。传统上,这是传统应用程序中的选项卡栏控制器或导航控制器,但有时它可以是完全自定义的东西,此时此功能可能很有用。

由于UIApplication几乎是一个单例并且有一个委托,这意味着您的 App Delegate 具有全局状态,这使得它可以从任何地方访问,包括在类方法中使用:[[UIApplication sharedApplication] delegate]

当然,任何单例都可以从任何地方访问,一种常见的模式(但我个人不喜欢)是有一个NavigationManager单例来管理任何全局视图控制器转换,因此在这种情况下,您也可以访问现有实例。

  • 在现实生活中,由于应用程序委托确实可能知道已经从故事板文件加载了哪些视图控制器以及如何在恢复机制启动时引用它们,所以我似乎更有可能跳过“viewControllerWithRestorationIdentifierPath” :coder:` 并使用应用程序委托的 `application:viewControllerWithRestorationIdentifierPath:coder:` _而不是_。由于这是一个实例方法,所以没有问题。我似乎未能引出任何人们不会这样做的情况。 (2认同)