【问题标题】:Nib IBOutlet causes app to crashNib IBOutlet 导致应用程序崩溃
【发布时间】: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

相信我,我什么都试过了。我可能已经重新创建了出口一百万次,但没有任何效果。任何帮助将不胜感激!

【问题讨论】:

    标签: ios swift swift3 nib iboutlet


    【解决方案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 相关的错误:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 2016-06-04
        • 2011-08-24
        • 2014-05-03
        • 1970-01-01
        • 1970-01-01
        • 2023-04-09
        相关资源
        最近更新 更多