致命错误:使用未实现的初始化程序Swift

时间:2017-11-08 09:35:54

标签: ios swift

我想在导航栏上放置一个图像和标签,所以我决定这样做:

class FixedImageNavigationItem: UINavigationItem {

    private let fixedImage : UIImage = UIImage(named: "navlogo")!
    private var imagak : UIImageView!
    private let imageView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 129, height: 40))
    private var labelaki : UILabel!


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        let tView = imageView
        imagak = UIImageView(frame: CGRect(x: 2, y: 3, width: 32, height: 35))
        labelaki = UILabel(frame: CGRect(x: 38, y: 10, width: 87, height: 21))
        imagak.image = fixedImage
        labelaki.text = "Prime Help"
        labelaki.textColor = UIColor.white
        imageView.addSubview(labelaki)
        imageView.addSubview(imagak)
        tView.contentMode = .scaleAspectFit
        self.titleView = tView

    }


}

以上代码在iPhone 5及更高版本上运行良好,但是当我尝试在iphone 4s ios 8上测试时,我收到了这个错误:

  

致命错误:使用未实现的初始化程序&#init;标题:'上课   ' Insurance.FixedImageNavigationItem'

有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

该错误与设备类型无关,但在iOS 9中引入了iOS版本init(coder:)方法,因此崩溃了。

但是,初始化程序init(title:)可以在iOS 2.0以上的iOS版本中使用,并且你已经在iOS 8上实现了它,这就是错误所在。

您应该实施init(title:)而不是init(coder:)

答案 1 :(得分:1)

只有在要在Storyboard或Xib中配置时才需要覆盖initWithCoder。在您的情况下,大多数元素已经声明为常量。当您覆盖initWithCoder时,您还必须覆盖initWithTitle,因为initWithTitleUINavigationItem指定的初始值设定项。示例代码会像这样。

 class CustomNavItem :UINavigationItem {
    private let fixedImage : UIImage = UIImage(named: "navlogo")!
    private var imagak : UIImageView!
    private let imageView : UIView = UIView(frame: CGRect(x: 0, y: 0, width: 129, height: 40))
    private var labelaki : UILabel!

    override init(title: String) {
        super.init(title: title)
        self.configure()

    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        self.configure()
    }
    func configure() {
        let tView = imageView
        imagak = UIImageView(frame: CGRect(x: 2, y: 3, width: 32, height: 35))
        labelaki = UILabel(frame: CGRect(x: 38, y: 10, width: 87, height: 21))
        imagak.image = fixedImage
        labelaki.text = title
        labelaki.textColor = UIColor.white
        imageView.addSubview(labelaki)
        imageView.addSubview(imagak)
        tView.contentMode = .scaleAspectFit
        self.titleView = tView
    }
}