gpt4 book ai didi

ios - UICollectionView,来自注册为单元格的框架目标的 nib 在运行时失败

转载 作者:搜寻专家 更新时间:2023-10-30 21:56:22 31 4
gpt4 key购买 nike

我在 xib 中绘制了一个 UICollectionViewCell 并附有 swift 类文件。这两个文件是我的应用程序的 UI 框架目标(称为 SomeUI)的一部分。

在我的 Collection View 的 View Controller 中(在应用程序目标中),我将 Nib 注册为 Collection View 单元格。我的 View Controller 代码如下;

import UIKit
import SomeUI

let reuseIdentifier = "Cell"

class ACollectionViewController: UICollectionViewController {

override func viewDidLoad() {
super.viewDidLoad()
self.collectionView.registerNib(UINib(nibName: "JamesTheCollectionViewCell", bundle: NSBundle(identifier: "SomeUI")), forCellWithReuseIdentifier: reuseIdentifier)
}

override func numberOfSectionsInCollectionView(collectionView: UICollectionView!) -> Int {
return 1
}

override func collectionView(collectionView: UICollectionView!, numberOfItemsInSection section: Int) -> Int {
return 1
}

override func collectionView(collectionView: UICollectionView!, cellForItemAtIndexPath indexPath: NSIndexPath!) -> UICollectionViewCell! {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as JamesTheCollectionViewCell
cell.titleLabel.text = "yippee"
return cell
}
}

在 nib 中,cell view 有适当的自定义类; SomeUI 模块中的 JamesTheCollectionViewCell。

screengrab of cell xib in xcode

虽然 Xcode 似乎对这个设置很满意,但在运行时我收到一个错误,因为找不到在 JamesTheCollectionView.swift 中定义的类。

Unknown class _TtC19collectionViewThing26JamesTheCollectionViewCell in Interface Builder file.

如果我将 JamesTheCollectionView.swift 的目标成员从框架切换到应用程序(但将 xib 保留为框架的一部分),一切运行良好。但是,我要求 xib 文件从框架加载类……我缺少什么,为什么当单元实现类是框架的一部分时它不起作用?

作为引用,这里是单元实现文件:

import UIKit

public class JamesTheCollectionViewCell: UICollectionViewCell {
@IBOutlet public weak var titleLabel: UILabel!
}

最佳答案

已解决。

长话短说:博士;更改文件的目标成员资格时,请记住在下一次构建之前执行 Product > Clean!

解释:问题是“SomeUI”不是有效的 UIBundle 标识符,因此 NSBundle(identifier: "SomeUI") 返回 nil,因此 registerNib 行从应用程序包而不是框架注册了一个 nib。应用程序包不包含单元实现类,因此它崩溃了。

但是……应用程序包也不应该包含 nib 吗?那么那里发生了什么?我一直在切换 nib 和实现文件的目标成员身份。我没有在构建之间运行“清理”,因此 nib 的副本留在了应用程序目标构建文件夹中。

原始问题的解决方案是通过将 NSBundle(identifier: "SomeUI") 替换为 NSBundle(forClass: JamesTheCollectionViewCell.self) 来从 SomeUI 框架正确加载 nib >

关于ios - UICollectionView,来自注册为单元格的框架目标的 nib 在运行时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25138989/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com