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 崩溃

插入 UICollectionViewCell 时在 iOS 10.3.1 上崩溃

应用程序在启动时崩溃