gpt4 book ai didi

ios - "Unknown class in interface builder file"在 Storyboard中使用从泛型类继承的类时

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

我最近重构了我的类 BookTableViewController来自 UITableViewController 的简单继承, 所以它现在继承自通用类 FetchedResultsTableViewController<TResultType, TCellType>它本身继承自 UITableViewController .

类声明如下所示:

class BookTableViewController: FetchedResultsTableViewController<Book, BookTableViewCell> {

override func viewDidLoad() {
// breakpoints in here do not catch!
}

}

class FetchedResultsTableViewController<TResultType, TCellType: UITableViewCell>:
UITableViewController, NSFetchedResultsControllerDelegate {

// implementation here

}

在 Storyboard 中,自定义类和模块都已设置,我可以单击箭头跳转到 BookTableViewController 的代码。类,表明 Storyboard已正确链接到类。但是,当我尝试运行该应用程序时,无法识别该类 - viewDidLoad() 中的代码不运行,我在运行我的应用程序时收到以下记录的消息:

Unknown class _TtC12Reading_List23BookTableViewController in Interface Builder file.

我正在运行 XCode 7.3 (Swift 2.2)。这是 Storyboard 的限制、错误,还是我遗漏了什么?

谢谢!

更新:

经过一些实验,它似乎确实与泛型继承有关,而不是类的可访问性。定义了以下类:

import Foundation
import UIKit

// Both of these classes are accessible by the Storyboard
class FirstInheritance : UITableViewController{}
class SecondInheritance : FirstInheritance{}

// The generic class is also accessible
class GenericViewController<T> : UITableViewController{}

// But this class is not accessible...
class ConcreteViewController : GenericViewController<String>{}

ConcreteViewController 之外的所有类在 Storyboard 的类自动完成中建议(尽管通用类也不起作用,因为无法在 Storyboard 中指定类型参数)。

最佳答案

游戏有点晚了,但这个信息可能对任何碰到这个话题的人都有用。

实际上,据我所知,从 Swift 3 开始, Storyboard中对泛型的支持有些笨拙。

我已经设法编写了一个扩展 UIViewController 的通用基类,然后约束了该通用类的几个子类并在 Storyboard中使用它们。

实际代码的布局与下面指定的布局类似:

class GenericParent: UIViewController {
// Has a few, non-generic members ...
}

class ActualGenericClass<T>: GenericParent {
// There are more generic members in the actual class
var adapter: Adapter<T> = Adapter()
}

// This class is usable in Interface Builder;
// although auto-complete won't show it, fully writing down
// the class name works
class SpecificInstanceOfActualGenericClass: ActualGenericClass<Int> {
@IBOutlet weak var tableView: UITableView!
}

令我惊讶的是,它完美地工作了!

另一方面,下一个例子似乎不起作用:

class GenericCell<T>: UITableViewCell {
var node: T? = nil
}
class SpecificCell: GenericCell<Int> {
@IBOutlet weak var coolTitleLabel: UILabel!
}

和以前一样,在 Interface Builder 上(在单元格的动态原型(prototype)上)显式写入单元格的类名会在表格 View 单元格上设置类,并且导出可见。

但是,在运行时,当实例化包含单元格动态原型(prototype)的 UIViewController 时,会显示“界面生成器文件中的未知类”警告,并且应用程序会在单元格出队时崩溃。

所以@Andew Bennet,声明:

Storyboards do not support classes which inherit from generic classes

虽然您至少是对的,但似乎不再是 100% 正确;这是我第一次成功实现这一目标,尽管只是部分实现!

有些东西有用,有些东西没用,这让我很烦恼,但总比没有好。

这在 Java 中非常简单......

关于ios - "Unknown class in interface builder file"在 Storyboard中使用从泛型类继承的类时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344158/

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