Nib IBOutlet 导致应用程序崩溃
Posted
技术标签:
【中文标题】Nib IBOutlet 导致应用程序崩溃【英文标题】:Nib IBOutlet causes app to crash 【发布时间】:2017-05-06 02:58:32 【问题描述】:真的需要你的帮助!我已经阅读了所有可能解决此问题的帖子,但似乎没有任何效果。
所以我使用 .xib 文件在 ProfileFoldingCellView.swift 中创建一个子视图,在我尝试在同一个类中添加一个 IBOutlet 之前它工作得很好。代码如下:
import Foundation
import UIKit
class ProfileFoldingCellView: UIView
@IBOutlet var mainLabel: UILabel!
public var cellIndex: Int = 0
init(index: Int)
super.init(frame: CGRect(x: 0, y: 0, width: 0, height: 0))
cellIndex = index
print("Index: \(cellIndex)")
setupContentView()
func setupContentView()
let contentView = UINib(nibName: "ProfileFoldingCellView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
contentView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
addSubview(contentView)
required init?(coder aDecoder: NSCoder)
super.init(coder: aDecoder)
setupContentView()
如您所见,标签 IBOutlet 的创建没有任何问题,并且没有其他过时或未使用的插座在周围漫游。
http://imgur.com/a/jb9CA
我还确保将 ProfileFoldingCellView.swift 设置为文件所有者的类。
在我连接插座之前,一切都运行良好!然后我得到这个错误:
http://imgur.com/a/6hHPG
相信我,我什么都试过了。我可能已经重新创建了出口一百万次,但没有任何效果。任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:将您的文件所有者保留为NSObject
,并将您的视图类设置为ProfileFoldingCellView
,您的mainLabel
应连接到UIView
对象而不是File's Owner
【讨论】:
好的,这绝对是朝着正确方向迈出的一步。没有错误,但现在 .xib UIView 没有显示。 更正,它崩溃了这个错误imgur.com/a/f7305。命令行只是说“(lldb)” 您有可能的解决方案吗? 伙计,我已经在这个错误中待了 3 个小时,你救了我。该死的。【参考方案2】:我修好了!
我只是换行了
let contentView = UINib(nibName: "ProfileFoldingCellView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView
以下内容:
let contentView = Bundle.main.loadNibNamed("ProfileFoldingCellView", owner: self, options: nil)?[0] as! UIView
我将文件所有者的类保留为 ProfileFoldingCellView
【讨论】:
【参考方案3】:根据您发布的图片,您的mainLabel
插座未连接到标签...它连接到files owner
对象,这可能是您的单元格视图而不是UILabel
。
【讨论】:
我试过这样做,但现在 .xib UIView 没有显示。 在这种情况下,我要做的是为整个UITableViewCell
创建一个 nib 文件,如果您需要 ProfileFoldingCellView,您可以在其中构建它。 UITableView 包含func register(_ nib: UINib?, forCellReuseIdentifier identifier: String)
,它允许您更轻松地注册一个 nib 以用于创建表格视图单元格。
这是唯一的解决方案吗?【参考方案4】:
上面已经提到了答案。我只是想用图像来说明它,以便更容易理解。
Step1:不要将类分配给文件所有者,将其保留为 NSObject
步骤 2:选择您的主视图并将类分配给该视图
第三步:现在连接你的插座
现在它不会导致任何与 IBOutlet 相关的错误:)
【讨论】:
以上是关于Nib IBOutlet 导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
由于 IBOutlet,iOS 应用程序在 didFinishLaunchingWithOptions 中崩溃
在使用分配的 IBAction (UIButton) 点击 IBOutlet 后,iOS 应用程序崩溃,没有任何异常
Swift 4:@IBOutlet UITextView 崩溃