通过 Unwind Segues 发送数据

Sending data through Unwind Segues

我有一个自定义展开转场问题。让我解释一下我的控制器设置:

我有一个主屏幕,它是一个导航控制器,里面有一个单元格视图。在此视图中,有一个用于添加数据的按钮,在该视图中有 4 个按钮用于添加额外的 "types" 数据。一旦用户选择了这四个选项中的一个,他们就会看到一个特定于他们选择的视图控制器,让他们可以使用完成按钮输入数据。从现在开始,我将这三个屏幕分别称为主视图、选项视图和数据视图(所有 4 个选项都遵循此约定)。

经过一些教程后,我在主视图的控制器 class 中制作了一个自定义的 unwind segue,如下所示:

@IBAction func unwindToTables(segue: UIStoryboardSegue) {
    //function proto for adding data here
    //populateTableWithData(data :ItemData)
}

在故事板编辑器中,任何时候我从任何视图控制器 control + click 到它的退出,它都会正确列出我的展开转场,这工作正常。

我现在想通过 unwind 发送数据。在数据视图中,我有一个完成按钮,用于构造和初始化一个 class 数据,称为 ItemData,我想通过 segue 将其传递给它。

我在 SO 或其他网站上发现的大多数问题都涉及正常的 segues,当我尝试实现它们时,应用程序会导致运行时错误/无法编译。

有没有人以前遇到过这个问题,并且对上述问题有解决方案?任何帮助或正确方向的观点将不胜感激!

编辑:

我按如下方式编辑了我的展开函数:

@IBAction func unwindToTables(segue: UIStoryboardSegue) {
    let dataC = segue.sourceViewController as? DataVC
    let data : ItemData = dataC!.SubmittedData! //unwrapping error

    print(data.Name)


    //save data

}

并且在每个新{1-4}ViewController之上我有以下内容:

import UIKit

class New1ViewController: DataVC,

我做了一个新的超级class DataVC:

import Foundation

class DataVC: UITableViewController {
    var SubmittedData: ItemData?
}

但现在我遇到了一个展开问题...我必须先初始化 SubmittedData 吗?

编辑 2:

以为我可以添加我正在做的“完成”按钮...

@IBAction func DonePressed(sender: AnyObject) {

    let n = ...
    ...
    let d = ...

    super.SubmittedData = ItemData(FieldType: "1", CName: n!, CPhone: p!, CAddress: a!, ShouldBe: s!, Repeats: r!, Starts: b, RemindMe: m!, AdditionalNotes: d!)

}

传递给您的 unwindToTables: 函数的 UIStoryboardSegue 有一个 属性 sourceViewControllee 这将是您的 Data 视图控制器的实例。

您需要所有的视图控制器都继承自一个公共超类,这样您就可以添加您需要的属性:

class DataVC: UITableViewController {
    var submittedData: ItemData?
}

那么你会得到类似的东西:

class New1ViewController: DataVC,... {
...
}

然后在您的展开方法中,您可以检索 submittedData 属性

@IBAction func unwindToTables(segue: UIStoryboardSegue) {
    if let dataVC = segue.sourceViewController as? DataVC {
      if let info = dataVC.submittedData {
         ...
      }
    }
 }