【问题标题】:Xcode 7 Swift 2 impossible to instantiate UIViewController subclass of generic UITableViewControllerXcode 7 Swift 2 无法实例化通用 UITableViewController 的 UIViewController 子类
【发布时间】:2015-12-30 18:13:03
【问题描述】:

我有一个通用类:

class PaginatedTableViewController
  <GenericElement, Source: PaginationDataSource 
     where Source.PaginatedGenericElement == GenericElement>:
  UITableViewController

我尝试从情节提要中实例化另一个:

class CandidatesTableViewController: 
   PaginatedTableViewController<Match, MatchPaginationDataSource>

我在故事板自定义类下拉菜单中找不到CandidatesTableViewController。如果我强制它然后将我的控制器转换为代码,应用程序在运行时崩溃抱怨我的控制器(应该是 CandidatesTableViewController 实例)实际上是一个 UITableViewController 实例。

未知类 _TtC21MyProjectName29CandidatesTableViewController 在 界面生成器文件。 无法转换类型的值 'UITableViewController' (0x1040917f8) 到 'MyProjectName.CandidatesTableViewController' (0x1013a9890)。

在我的项目中,这个控制器嵌入在另一个控制器中,这就是我将其转换为的原因:

tableViewController = (segue.destinationViewController as! CandidatesTableViewController)

有谁知道如何解决这个问题?

【问题讨论】:

    标签: ios swift generics swift2


    【解决方案1】:

    不幸的是,通用 Swift 类对 Objective-C 代码不可见,并且在 Interface Builder(故事板和 xibs 中)也不支持。我发现这两点密切相关。

    作为一种解决方案,我建议您使用聚合:不要让您的视图控制器通用,而是将一些逻辑提取到另一个(通用)类并在您的视图控制器中使用它。

    【讨论】:

      【解决方案2】:

      如果您通过 load() 方法(即调用)手动将通用 VC 加载到 Objective-C 运行时中,这是可能的。 PaginatedTableViewController.load() 在您的应用程序委托的 init 方法中。来自https://stackoverflow.com/a/43896830/671580的想法

      【讨论】:

        猜你喜欢
        • 2018-04-19
        • 2016-07-28
        • 2019-08-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        相关资源
        最近更新 更多