【问题标题】:Deleting xib files causes "NSInternalInconsistencyException, reason: 'Could not load NIB in bundle: "删除 xib 文件会导致“NSInternalInconsistencyException,原因:'Could not load NIB in bundle:”
【发布时间】:2017-12-05 14:44:43
【问题描述】:

当我删除视图控制器的 xib 文件时,出现以下错误:“无法在包中加载 NIB...名称为 'LibraryViewController'”。我引用了这个question

我已经做过的事情:

  • 从模拟器中删除应用
  • 已删除派生数据
  • 清理构建文件夹
  • 重新启动我的电脑
  • 已尝试清除 /var/folders 的内容。但是,我无法删除 /var/folders 中的文件夹 8k、gf 和 zz,因为它们是 Mac OS 所必需的。

有什么方法可以删除我未使用的 xib 文件而不会使我的应用崩溃?

更新:

 override func viewDidLoad() {
      libraryTable.register(UINib(nibName: "categoriesTableViewCell", bundle: nil), forCellReuseIdentifier: "categoriesTableViewCell")
 }

public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.section == 0  {
        let cell = tableView.dequeueReusableCell(withIdentifier: "categoriesTableViewCell", for: indexPath) as! categoriesTableViewCell
        return cell
    } else {
        let cell = songTableViewCell()
        return cell
    }
}

【问题讨论】:

  • 您是从 .xib 或情节提要手动加载视图控制器,还是使用 IB 完成所有操作?您的错误是否可能是由于您仍然拥有尝试加载不再存在的 .xib 的代码?如果是这样,您可以创建一个新的 .xib,或者如果您仍然需要该功能,可以在代码中创建一个视图控制器。
  • 当我第一次创建视图控制器时,我检查了“同时创建一个 XIB 文件”。我没有在视图控制器 xib 文件上放置任何内容,也没有在代码中注册 xib 文件,因此视图控制器应该仅通过代码加载。但是,编译器仍然编译那些视图控制器 XIB 文件
  • @Mozahler 你知道我的问题是否有解决方案吗?
  • 我以为我做到了,但你的最后一条笔记让我很困惑。如果删除了文件,编译器如何编译它们?如果确实删除了 .xib 文件,则这些文件不会导致您的错误。您的错误是由于您仍然拥有的代码尝试加载不再存在的 .xib 。您可以在注册出列的单元格的位置显示您的代码吗?也是 cellForRowAt 中的行,用于使单元格出列。这应该告诉我们我们需要知道什么。另一种可能性是您引用了 IB 中需要更新的单元格。
  • @Mozahler 好的,我更新了我的答案。另外,我正在尝试删除与我的库视图控制器关联的“LibraryViewController.xib”。视图控制器xib完全独立于表格视图单元xib,“categoriesTableViewCell.xib”,所以我不确定为什么需要请求的代码

标签: xcode caching xcode8 xib


【解决方案1】:

替换您注册单元格的代码(您现在希望在代码中而不是.xib/storyboard中创建),如下所示:

libraryTable.register(UITableViewCell.self, forCellReuseIdentifier: "categoriesTableViewCell")

您在上面显示的行注册了 nib,因此当需要创建一个单元格时,您已经在某个 nib 文件中告诉它它。替换行以编程方式创建一个默认单元格,这意味着您需要使用 swift 代码而不是 InterfaceBuilder 提供的 GUI 方法对其进行任何修改。这很简单。

【讨论】:

  • 嗨,我实际上是想删除 LibraryViewController.xib。我没有通过情节提要或代码在视图控制器xib上放任何东西,所以我不确定为什么我不能删除它。
  • 你可以。确切的错误信息是什么?您必须有引用笔尖的代码。 (类似于单元格的寄存器笔尖。)您的代码中是否在任何地方提到了 libraryviewcontroller?
  • 哦,我意识到我在 TabBarViewController 中初始化了 var libraryViewController = LibraryViewController(nibName: "LibraryViewController", bundle: nil)。已修复,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多