2017-06-30 1 views
0

初期ビューコントローラから複数のオブジェクトをUsername VCに送信しようとしています。ここに私のコントローラからのセグのコードがあります:問題は、2番目のオブジェクトを送信するためにコードに追加したときです。termreporttermsMとその課題を削除すると、通常は生徒が送信されますが、termReportオブジェクトも送信する必要があります。どうすればこの問題を解決できますか?複数のオブジェクトをビューコントローラに送信する

ViewControler

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard let students = sender as AnyObject as? [Student] 
    else { return } 
    guard let termsM = sender as AnyObject as? [TermReport] //How would I send both objects? 
    else { return } 
    if let secondVC = segue.destination as? UsernameVC { 
     secondVC.students = students 
     secondVC.userWebView = webView 
     secondVC.terms = termsM // not sending 
    } 
    let gradeResponse = try Parser(innerHTML) 
    self.performSegue(withIdentifier: "ShowStudents", sender: gradeResponse.students) 
    self.performSegue(withIdentifier: "ShowStudents", sender: gradeResponse.termReports) //how would I send both variables? 

UsernameVC

var terms: [TermReport]! 
override func viewDidLoad() { 
    print("TERM \(terms[0].grades[3])")//returns found nil optional ERROR 
} 

答えて

2

あなたは(これは1つのオブジェクトにセグエを使用して別のViewControllerに送信するすべての変数を含める必要がコレクションでもあります)。タイプが[Student]および[TermReport]のプロパティを持つカスタムクラス/構造体を作成するか、またはこれらをネイティブコレクション(タプルまたはディクショナリ)に配置します。

カスタム構造体を作成します。それをする

struct TermData { 
    var students = [Student]() 
    var termReports = [TermReport]() 
} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    guard let segueData = sender as? TermData 
    else { return } 
    if let secondVC = segue.destination as? UsernameVC { 
     secondVC.students = segueData.students 
     secondVC.userWebView = webView 
     secondVC.terms = segueData.termReports 
     } 
}  

let gradeResponse = try Parser(innerHTML) 
let termData = TermData(students: gradeResponse.students, termReports: gradeResponse.termReports) 
self.performSegue(withIdentifier: "ShowStudents", sender: termData) 
+0

非常にクールな方法を!本当にうまくいった。ありがとう。ただし、let termData = TermData()を割り当てるときは、パラメータでインスタンス化してから次の2行を削除する必要があります。それ以外は、素晴らしい作品です。 – yzet00

+0

うれしいことがわかりました。うん、そうです、私は 'termData'を可変であると宣言していたはずですが、この場合、あなたは正しいです、それはすぐに値で初期化することができます。 –

関連する問題