当 ViewController 有从 Xib 唤醒的视图时出现 NSUnknownKeyException [重复]

Posted

技术标签:

【中文标题】当 ViewController 有从 Xib 唤醒的视图时出现 NSUnknownKeyException [重复]【英文标题】:NSUnknownKeyException when ViewController has a view awaken from Xib [duplicate] 【发布时间】:2017-06-20 11:38:36 【问题描述】:

我只想使用代码从一个 ViewController 跳转到另一个

    btn_routh.addTarget(self, action: #selector(self.goToPoiDetail), for: .touchUpInside)

    @objc open func goToPoiDetail() 

    self.present(PoiDetailViewController(), animated: true, completion: nil)

但是当我点击 btn_routh 按钮时,出现了错误

*** Terminating app due to uncaught exception 'NSUnknownKeyException',
    reason: '[<OMOT.PoiDetailViewController 0x7fb269f1e010> 
    setValue:forUndefinedKey:]: this class is not key value coding-compliant 
    for the key addressLabel.'

但是当我写的时候

    print("print")

在 goToPoiDetail 函数中,它打印得很好,所以我认为问题出在跳句上

在别的地方

btn_cate.addTarget(self, action: #selector(self.showSubMenu), for: .touchUpInside)

单击 btn_cate 按钮效果很好。

当前ViewController与其他ViewController的最大区别在于ViewController中有一个自定义View,自定义View使用xib构建view的界面。但是没有跳跃动作,自定义视图显示效果很好。

下面是我的自定义视图的代码,其中有一个“addressLabel”字段,显示在错误警告中

import UIKit

class PoiDetailView: UIView 
    @IBOutlet weak var categoryLabel: UILabel!
    @IBOutlet weak var introLabel: UILabel!
    @IBOutlet weak var addressLabel: UILabel!
    @IBOutlet weak var distanceLabel: UILabel!
    @IBOutlet weak var closeButton: UIButton!
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet var containView: UIView!
    var action:(()->Void)?

    var category:String = ""
        didSet
            categoryLabel.text = category
        
    
    var intro:String = ""
        didSet
            introLabel.text = intro
        
    
    var address:String = ""
        didSet
            addressLabel.text = address
        
    
    var distance:String = ""
        didSet
            distanceLabel.text = distance
        
    
    var imageUrl:String = ""
        didSet
            ImageLoader.sharedLoader.imageForUrl(urlString: imageUrl)
                image,url in
                print("load image")
                self.imageView.image = image
            
        
    
    var imageAsset:String = ""
        didSet
            imageView = UIImageView(image: UIImage(named: imageAsset))
        
    

    func setImage(data:Data)
        print("\(#function)")
        imageView.image = UIImage(data: data)
    

    override init(frame: CGRect) 
        super.init(frame: frame)
        setupXib()
    
    required init?(coder aDecoder: NSCoder) 
        super.init(coder: aDecoder)
        setupXib()
    
    func setupXib()
        let view = Bundle.main.loadNibNamed("PoiDetailView", owner: self, options: nil)?.first as! UIView
        view.autoresizingMask = [.flexibleHeight,.flexibleWidth]
        addSubview(view)
    


    @IBAction func closeDetail(_ sender: UIButton) 
        isHidden = true
    


问题出在哪里?如何从拥有 Xib 视图的 ViewController 中跳转。

【问题讨论】:

检查您是否在 xib 中正确分配了正确的类名。 删除Viewcontroller跳转到就可以了 【参考方案1】:

检查你的addressLabel的IBOutletConnection。

更好,断开您所做的布局连接并重新连接标签。您可能指的是不存在的 IBOutlet 或 IBAction。希望它会有所帮助。

【讨论】:

删除Viewcontroller跳转到就可以了

以上是关于当 ViewController 有从 Xib 唤醒的视图时出现 NSUnknownKeyException [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中的 ViewController 上加载 .xib UIviews

从 xib 调用 viewController

如何使用一个 ViewController 文件加载横向 xib?

ViewController_iPad.xib 与 ViewController~ipad.xib

单击按钮导航到root viewcontroller

Xib 到 ViewController