【发布时间】:2015-06-16 03:12:41
【问题描述】:
我正在创建一个咖啡计时器作为学习练习,我想根据所选的冲泡方法制作不同的菜单。我将我的设置存储在 NSUserDefaults 中,并使用两个单独的数组填充我的表,如下所示:
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,
])
我创建了两个 UITableViewController,一个用于FrenchPress,一个用于AeroPress,它们的代码基本相同:
FrenchPressTableViewController.swift - 设置菜单
AeroPressTableViewController.swift - 设置菜单
两者都为我的 Setting.Swift 类 (gist) 的实例赋值并存储在不同的数组中。
在 IB 中,我从我的法式压力机控制器开始,并创建了两个原型单元和两个原型类来配合它们。
SwitchCell.Swift - 我的 UISwitch 原型电池插座的模型
TimingCell.Swift - 为我的 TimingButton 原型电池插座建模
采取的初步步骤:
- 在 IB 中为我的法国媒体设置创建新的 tableView。
- 创建一个指定的FrenchPressTableViewController,并将其分配给我的新法国媒体表视图
- 使用我的 SettingCell 和 TimingCell 类设置两个新原型单元并设置 IBOutlets/Actions。
- IBOutlets 从我的 FrenchPressTableViewController 连接到我的 SettingCell.swift(我稍后将这些插座用于我的 Aero 设置)。
我的 FrenchPress 设置工作正常:
所以我决定使用相同的过程添加我的 Aero 印刷机设置菜单:
- 在 IB 中创建新的 tableView
- 创建一个AeroPressTableViewController,并将其分配给我的新航空表视图
- 设置两个新的原型单元并将我以前存在的 SettingCell 和 TimingCell 分配给适当的单元。
- 我利用之前连接到我的 FrenchPressTableViewController 的插座,并将它们连接到我的 Aero 控制器以及重用单元类。
最终产品如下所示:
但是当我运行 Aero 设置菜单时,我收到以下错误:
致命错误:在展开可选值时意外发现 nil
问题:
从我的调试器可以看出,我的 SettingCell 类似乎返回了一个带有cell.switchLabel.text 的nil 值。这对我来说没有意义,因为我正在尝试为它分配一个值。
显然我做错了什么,重用我的 UITableViewCell 类的正确方法是什么?
【问题讨论】:
-
删除该行 tableView.registerClass(SwitchCell.self,forCellReuseIdentifier:"SwitchCell2") 并在情节提要中添加 cellIdentifier ..它有效..
-
你搞定了...我实际上添加了 registerClass 上周解决了一个非常相似的问题,导致了这个问题。我必须在故障排除时解决了上一个问题。好吧...如果您将此作为答案发布,我会接受,或者我会阅读您的其他一些帖子,看看是否有任何我想投票的。谢谢阿尼什
-
我很高兴它成功了!!!
标签: swift uitableview code-reuse iboutlet tableviewcell