ios - 使用 instantiateViewControllerWithIdentifier 访问相同的 View Controller

标签 ios swift uistoryboard

我在 Storyboard 中有一个 UIViewController,其 Storyboard ID 称为“MyViewController”(嵌入在 UINavigationController 中作为入口点), 我试图使用 instantiateViewControllerWithIdentifier 从另一个类访问它,例如:

MyAccessor.swift

func accessMyViewController(){
  let storyboard = UIStoryboard(name: "Main", bundle: NSBundle.mainBundle())
  let vc = storyboard.instantiateViewControllerWithIdentifier("MyViewController")
  print(vc.description)
}

MyViewController.swift

override func viewDidLoad() {
  print(self.description)
}

控制台

<MyViewController: 0x7ff6ab76f9c0>
<MyViewController: 0x7ff6ab557410>

我打印出了不同的内存地址,

他们不应该是同一个人吗?

最佳答案

可能您的 navigationController 是 Storyboard入口点

因此,如果这是真的,则有两个实例..一个在您的应用程序启动期间创建,另一个从您的代码中以编程方式调用。

P.S.:viewDidLoad 不会仅通过实例化 View Controller 来调用,参见 documentation有关详细信息..,否则您已经看到了三个打印品..

enter image description here

如果您想立即查看您的情况,请尝试修改您的打印行:

MyAccessor.swift

func accessMyViewController(){
    ...
    print("∙ \(NSStringFromClass(self.dynamicType)) - vc details : \(vc.description) ")
}

MyViewController.swift

override func viewDidLoad() {
    ...
    print("∙ \(NSStringFromClass(self.dynamicType)) - self details : \(self.description) ")
}

关于ios - 使用 instantiateViewControllerWithIdentifier 访问相同的 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738851/

相关文章:

ios - Swift - 如何在键盘抬起时滚动 collectionView 的内容

ios - 不工作 - 以编程方式在 Api 中注册用户

ios - 仅限 iOS9 上的 UICollectionView NSInternalInconsistencyException 错误

ios - Swift 3 核心数据删除对象

ios - 使用 UIRectFill 填充单元格的一部分

ios - iOS中如何实现长振动

iphone - 在进入 Storyboard 中的场景之前检查用户是否已登录

ios - 自定义 UIStoryboardSegue 和 UIViewController 转换之间的区别

ios - 滑动以从屏幕外移动容器 View Controller

ios AVAudioPlayer 持续时间错误