ios – 使用继承自Storyboard中的泛型类的类时,“接口构建器文件中的未知类”

ios – 使用继承自Storyboard中的泛型类的类时,“接口构建器文件中的未知类”,第1张

概述我最近从UITableViewController的简单继承重构了我的类BookTableViewController,因此它现在继承自泛型类FetchedResultsTableViewController< TResultType,TCellType>它本身继承自UITableViewController. 类声明如下所示: class BookTableViewController: Fet 我最近从UItableVIEwController的简单继承重构了我的类BooktableVIEwController,因此它现在继承自泛型类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中,Custom类和Module都已设置,我可以单击箭头跳转到BooktableVIEwController类的代码,建议故事板正确链接到类.但是,当我尝试运行该应用程序时,无法识别该类 – vIEwDIDLoad()中的代码未运行,并且在运行我的应用程序时收到以下记录的消息:

UnkNown class _TtC12Reading_List23BooktableVIEwController in Interface Builder file.

我正在运行XCode 7.3(Swift 2.2).这是故事板的限制,一个错误,还是我错过了什么?

谢谢!

更新:

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

import Foundationimport UIKit// Both of these classes are accessible by the Storyboardclass Firstinheritance : UItableVIEwController{}class Secondinheritance : Firstinheritance{}// The generic class is also accessibleclass GenericVIEwController<T> : UItableVIEwController{}// But this class is not accessible...class ConcreteVIEwController : GenericVIEwController<String>{}

除了ConcreteVIEwController之外的所有类都在Storyboard的类自动完成中建议(尽管泛型类也不起作用,因为无法在Storyboard中指定类型参数).

解决方法 游戏的后期不多,但是这个信息可能会让任何碰到线程的人都派上用场.

实际上,据我所知,现在,就Swift 3而言,在故事板中对泛型有一些尴尬的支持.

我设法编写了一个扩展UIVIEwController的通用基类,然后约束该泛型类的几个子类并在故事板中使用它们.

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

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 worksclass 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上显式写入单元格的类名(在单元格的动态原型上)会在表格视图单元格上设置类,并且可以看到出口.

但是,在运行时,在实例化包含单元格动态原型的UIVIEwController时,会显示“界面构建器文件中的未知类”警告,并且在出列单元格时应用程序崩溃.

所以@Andew Bennet,声明:

Storyboards do not support classes which inherit from generic classes

似乎不再100%真实,尽管你至少是正确的;这是我第一次成功地将这一部分拉下来,尽管只是部分!

让我觉得有些东西有效,有些则没有,但它总比没有好.

这在Java中非常直截了当……

总结

以上是内存溢出为你收集整理的ios – 使用继承自Storyboard中的泛型类的类时,“接口构建器文件中的未知类”全部内容,希望文章能够帮你解决ios – 使用继承自Storyboard中的泛型类的类时,“接口构建器文件中的未知类”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1025116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存