【问题标题】:SWIFT uiviewcontroller initSWIFT uiviewcontroller 初始化
【发布时间】:2014-11-02 18:43:55
【问题描述】:

我开始使用 Swift

当我可以避免使用故事板时,使用 Objective-C,初始化视图控制器很容易。我只需创建一个UIViewController 子类,然后将所有初始化代码放入其中 initWithNibName.

现在有了故事板,我迷路了。我创建了一个UIviewController 子类,我尝试添加init(nib name) 和init(coder) 但它崩溃了。

这是我的代码:

   //
    //  SecondViewController.swift
    //  tabTestWithSwift
    //
    //  Created by Marianna Ruggieri  on 02/11/14.
    //  Copyright (c) 2014 Marianna Ruggieri. All rights reserved.
    //

    import UIKit

class FirstViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
        println("init with nib")
        super.init()
        tabBarItem.title = "test"
    }

    required init(coder aDecoder: NSCoder) {
        //fatalError("init(coder:) has not been implemented")
        print("init coder")
        super.init()
    }

}

看这个截图: http://oi62.tinypic.com/10ogwsh.jpg

编辑:我没有做任何特别的事情。启动了一个TabBar 项目并编辑了视图控制器,如您在上面的代码中所见。就是这样!!!!

如果我使用情节提要,初始化UIViewController 的正确方法是什么?我应该将视图控制器的所有设置放在哪里?对于某些设置,加载为时已晚。

【问题讨论】:

  • 它在哪里崩溃?有异常消息吗?到目前为止,您对debug 有什么尝试?
  • 你是如何尝试实例化这个视图控制器的?在转场?在代码中?
  • (lldb) 我不擅长调试器,但我认为它会在 nib 的初始化时崩溃。我启动了 Xcode 6.1 并打开了一个新项目 TabBarController,在故事板中我有我的 2 个视图控制器......这是第二个的代码......这就是我所做的一切
  • 1.你的init 方法在这里不是必需的,除非你在那里做任何材料,你不是(title 的设置可以移动到viewDidLoad)。 2. 问题不在于上面的代码,而在于你如何实例化这个视图控制器。向我们展示创建/使用此视图控制器的代码和/或告诉我们您是如何配置故事板的。当您说“它崩溃了”时,这并不能提供太多信息:您必须告诉我们完整的错误消息是什么!
  • 这是我的错误屏幕i61.tinypic.com/2vmzdco.png

标签: ios swift uiviewcontroller initialization


【解决方案1】:

您正在通过调用super.init() 创建一个循环,而您应该调用init(nibName:nibBundleOrNil)init() 的 super 实现调用你的方法,然后又调用 super init。

【讨论】:

  • 成功了!!!!你能更好地解释一下为什么吗?我试图将 super.init(coder:aDecoder) 也放入 init(coder) 中,但它从未调用过 nib init ......我迷路了,因为 Xcode 总是希望我使用 init(coder)
  • 一般来说,当你重写一个函数时,对 super 的调用应该使用相同的签名(如果你不这样做,笔尖名称和包名称将丢失)。调用哪个初始化程序取决于您如何实例化您的类或 nib
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-28
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
相关资源
最近更新 更多