2016-06-19 60 views
0

我有一个自定义放松SEGUE问题。让我解释一下我的控制器设置:发送数据

我有一个主屏幕,这是一个导航控制器中的单元格视图。在这个视图中,有一个用于添加数据的按钮,在该视图中有4个按钮用于添加其他“类型”数据。一旦用户选择了这四个选项中的一个,他们就会看到一个特定于他们选择的视图控制器,让他们用一个完成按钮输入数据。我将从现在开始分别将它们称为主视图,选项视图,然后是数据视图(所有4个选项都遵循这个约定)。

一些教程后,我做了一个自定义的身心在主视图中的控制器类SEGUE,如下所示:

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

在故事板编辑器,只要我control + click从任何视图控制器它的退出,它会列出我的正确放松继续,这工作正常。

我现在想通过开卷发送数据。在数据视图中,我有一个完成按钮构造并初始化类数据,称为的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的视图控制器顶部我有以下几点:

import UIKit 

class New1ViewController: DataVC, 

和我做了一个新的超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!) 

} 

回答

2

传递到您的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 { 
     ... 
     } 
    } 
} 
+0

因此,在您的嘲讽离子我实际上有每个视图控制器分开的类。我在Data View类中继续前进,并在任何方法(全局变量非常多)之外完成了这个'var dataValues:ItemData',并将其填充到我的Done按钮中。现在,当我进入主视图的控制器类并放置你放入的内容(当然是修改过的)时,我无法访问该变量,因为它是内部的,而且输入public会导致初始化(???)出错。 –

+1

如果您添加一个属性,您需要初始化它或将其声明为可选。我会建议可选的方法,这意味着解开它,如果你访问它 – Paulw11

+0

我刚刚意识到我可能会遇到问题,我正在检查四个不同的viewcontrollers ...看我的编辑,看看你是否可以确认这一点.. –