SWIFT uiviewcontroller 初始化
Posted
技术标签:
【中文标题】SWIFT uiviewcontroller 初始化【英文标题】:SWIFT uiviewcontroller init 【发布时间】: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
【参考方案1】:
您正在通过调用super.init()
创建一个循环,而您应该调用init(nibName:nibBundleOrNil)
。 init()
的 super 实现调用你的方法,然后又调用 super init。
【讨论】:
成功了!!!!你能更好地解释一下为什么吗?我试图将 super.init(coder:aDecoder) 也放入 init(coder) 中,但它从未调用过 nib init ......我迷路了,因为 Xcode 总是希望我使用 init(coder) 一般来说,当你重写一个函数时,对 super 的调用应该使用相同的签名(如果你不这样做,笔尖名称和包名称将丢失)。调用哪个初始化程序取决于您如何实例化您的类或 nib以上是关于SWIFT uiviewcontroller 初始化的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 3 中覆盖 UIViewController 初始化
是否可以根据从 Swift 中的 UIViewController 继承的类中的另一个来初始化变量?