使用两个不同的 UITableViewControllers 重用 UITableViewCell 的 IBOutlets

Reusing a UITableViewCell's IBOutlets with two different UITableViewControllers

我正在创建一个咖啡计时器作为学习练习,我希望根据所选的冲泡方法提供不同的菜单。我将我的设置存储在 NSUserDefaults 中,并用两个单独的数组填充我的 tables,如下所示:

var aero = ([
        "Cool Down Time Enabled" : true,
        "Cool Down Time" : 30,
        "Inverted" : true,
        "Base Steep Time" : 150,
        "Base Inverted Steep Time" : 180,

        ])

var french = ([
        "Cool Down Time Enabled" : true,
        "Cool Down Time" : 30,
        "Base Steep Time" : 180,

        ])

我创建了两个 UITableViewControllers,一个用于 FrenchPress,一个用于 AeroPress,它们基本上是相同的代码:

FrenchPressTableViewController.swift - 设置菜单

AeroPressTableViewController.swift - 设置菜单

两者都将值分配给我的 Setting.Swift class (gist) 的实例,并存储在不同的数组中。

在 IB 中,我从我的法式压力机控制器开始,创建了两个原型单元和两个原型 classes 以配合它们。

SwitchCell.Swift - 我的 UISwitch 原型电池插座模型

TimingCell.Swift - 为我的 TimingButton 原型电池插座建模

采取的初始步骤:

我的 FrenchPress 设置 工作正常

所以我决定使用相同的过程添加我的 Aero 压力机设置菜单:

最终产品看起来像这样:

但是当我 运行 我的 Aero 设置菜单时,出现以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

问题:

从我的调试器中可以看出,我的 SettingCell class 似乎正在返回一个 nilcell.switchLabel.text。这对我来说没有意义,因为我正在尝试为其分配一个值。

显然我做错了什么,重用我的 UITableViewCell classes 的正确方法是什么?

将 UITableViewCell class 注册为 tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2")

时会出现此问题

删除该行 tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2") 并在情节提要中设置 cellIdentifier..它有效