【发布时间】:2016-08-18 08:23:16
【问题描述】:
斯威夫特 2.2, IOS 9, 最新版本的Realm
我有一个经典的两个控制器项目,它们都是 TableView 控制器。
ViewController 1 是 Items 列表:ItemsViewController ViewController 2 有能力给行程添加物品 = ItemDetailsViewController
准备详细信息和保存详细信息的代码是使用详细信息控制器中的基本 prepareForSeque 和列表控制器中的 @IBAction 函数完成的
当使用基本数组完成此操作时,一切都运行良好。当时的数组称为 items,单个元素称为 item。
但是,当我将其转换为 Realm 项目时,出现了问题。
我开始在 @IBAction 函数内的 ItemsViewController 中遇到错误。
为了追查错误,我在详细信息控制器中执行了写入命令,主要是作为故障排除活动,但打算在我整理完后将其移至列表控制器
为 segue 代码做准备
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "SaveItemDetail" {
item.id = NSUUID().UUIDString
item.name = nameTextField.text!
try! uiRealm.write {
uiRealm.add(item)
}
}
}
IBAction 版本 1。
@IBAction func saveTripDetail(segue:UIStoryboardSegue) {
}
在这个我什么都不做的版本中,我在块的末尾收到了一个中断错误。或者如果我输入 print("hello world") 在运行时出现中断错误
第 2 版 如果我尝试从详细信息控制器获取项目信息
@IBAction func saveItemDetail(segue:UIStoryboardSegue) {
if let itemDetailsViewController = segue.sourceViewController as? ItemDetailsViewController {
if let item = itemDetailsViewController.item {
}
}
}
在这个版本中,我无法让构建工作并出现以下错误
initialiser for conditional binding must have Optional type not 'Item'
所以我显然错过了 Realm 如何与类一起工作的一些东西,并且无法真正理解为什么。对此有什么想法吗?
【问题讨论】:
-
似乎错误出现在您版本 1 的其他线程上,而版本 2 似乎与 Realm 相关,它的 Swift 东西,因为您对非对象进行
if let检查-optional,所以你得到了那个错误,因为它假设永远不会是nil,仍然很难看出这里真正的问题是什么......也许写得更清楚 -
能否提供您在 V1 中收到的错误消息?至于 v2,如果您的
itemDetailsViewController.item不是选项,则不需要使用if let ..。 -
好的,似乎 cmets 中有一些东西 swift 没有解释为评论,因此导致了问题。我吹走了所有的 cmets,虽然事情不完美,但所有奇怪的错误都消失了