【问题标题】:The crash of IBOutletIBOutlet 的崩溃
【发布时间】:2016-07-01 01:53:36
【问题描述】:

我在 swift 中通过 xib 编写了一个自定义视图。视图显示正确,@IBAction 也是正确的。但是当我添加@IBOutlet 时,应用程序会崩溃。

错误信息是:

2016-03-15 22:32:16.650 ****[42692:1015001] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<NSObject 0x7f8ea483cd30> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key cancelBtn.'

还有xib:

代码是:

 class PYChangeNameView: UIView { 
  var confirmAction: ((name: String?) -> ())? 
  var cancelAction: (() -> ())? 

  @IBOutlet weak var cancelBtn: UIButton! 

  private init() { 
   super.init(frame: CGRectZero) 
   if let view = UIView.loadFromNibNamed("PYChangeNameView") {    
    view.autoresizingMask = [.FlexibleWidth, .FlexibleHeight] 
    self.frame = UIScreen.mainScreen().bounds self.addSubview(view) 
   } 
  }

  @IBAction func cancelClick(sender: AnyObject) {
    PYCNVStaticValues.sharedInstance?.removeFromSuperview()
    PYCNVStaticValues.cancelAction?()
  }
}

@IBAction 有效,但 @IBOutlet 无效。 }

【问题讨论】:

  • 这个按钮在xib中真的被命名为“cancelBtn”吗?根据动作名称和错误消息,我猜它被命名为“取消”。
  • 可以看到图片,按钮名为“cancelBtn”。
  • 您是否在其他任何地方为该按钮添加了 IBOutlet?
  • @HugoAlonso 不,我在项目中搜索了键“cancelBtn”,只有这个地方。
  • NSObject...setValue:forUndefinedKey: 而不是UIViewController...setValue:forUndefinedKey: 是不是很有趣。您的文件所有者是什么样的?

标签: ios swift


【解决方案1】:

查看错误:它告诉您NSObject 没有cancelBtn 字段。为什么会这样?

查看您的屏幕截图,我可以看到您的File's Owner 上设置了cancelBtn 插座。 (插座应设置为您的自定义视图。)

因此,我可以得出结论,您的 File's Owner 对象没有与您的 PYChangeNameView 正确关联,并且运行时认为它只是一个 NSObject。我相信您需要将该类设置为您的 XIB 中的类型 - 可能在右侧的控件中。

查看我拍摄的这张漂亮的 Retina 品质屏幕截图:

可能还需要设置 Module 字段。您可以从this answer 获得一些见解。

【讨论】:

  • 我认为你是对的,我(慢慢地)得出了同样的结论,只是需要确定一下 :-)
  • @QED 我怎样才能与 PYChangeNameView 正确关联?
  • @PlutoY 我添加了一张漂亮的 Retina 品质屏幕截图,向您展示如何操作。
  • @QED 是文件所有者吗?如果是,我已经设置了。
  • @PlutoY 它应该是自定义视图。
【解决方案2】:

检查以确保您的视图的xibPYChangeNameView

【讨论】:

  • 上面说的是Module,实际上有一些不同于None
  • 你的模块应该是你的项目名称。不是“无”
  • 您也可以尝试删除您的插座连接并控制将其拖回。
  • @DanielLeonard 是的,这就是我创建 oulet 的方式。 module 也是我的项目名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-07
  • 2019-05-08
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
相关资源
最近更新 更多