2016-06-19 61 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 ...看我的編輯,看看你是否可以確認這一點.. –