2017-09-19 1 views
0

私のプログラムには3つのビューコントローラがあります。最初のビューコントローラから3番目のビューコントローラにセグリングなしで1つ以上の値を送ることはできますか?Swift 3.0を使用すると、セグメント化されていないビューコントローラにデータを渡すことはできますか?

または値を最初、2番目、3番目に送信する必要がありますか?

ありがとうございます。

答えて

0

あるView Controllerから別のView Controllerにデータを渡す方法はたくさんあります。彼らが共通しているのは、データが渡されたときにビューが作成されているということです。あなたのシナリオでは、すべてが作成されているわけではありません。

したがって、1から2に3、1が表示されている場合は、3はまだインスタンス化されていません。 3を作成し、変数を設定してから、新しく作成したビューコントローラ3をコントローラ2に渡して、2が表示され、既に作成された3が画面に表示されるようにする必要があります。そのプロセス全体があなたの質問の主な目的を破り、あなたが避けようとしているステップよりもはるかに多くの作業です。

渡す変数が1つまたは2つある場合は、2に渡してから3に渡すという面倒なことではありません。大量のデータがある場合は、1つの配列に入れて保存することを検討してくださいコアデータに変換したり、データモデルを完全に変更したりすることもできます。

1

すべてのコントローラがまだインスタンス化されているかどうかわからないため、値を直接渡すことに頼るべきではありません。モデルクラスまたは構造体を作成して、すべての3つのコントローラに値を格納したり参照したりすることができます。モデルクラスの基本例:次に

import Foundation 

fileprivate let sharedModelInstance = Model() 

class Model { 
    var basicString : String = "string" 

    static var sharedInstance : Model { 
     return sharedModelInstance 
    } 

    func setBasicString(_ str: String) { 
     basicString = string 
    } 
} 

コントローラ:

import UIKit 

class ViewController : UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // reads 'string' 
     let aStr : String = Model.sharedInstance.basicString 

     Model.sharedInstance.setBasicString("Hello") 

     // Now 'Hello' 
     let anotherStr : String = Model.sharedInstance.basicString 
    } 

} 

この方法ですべてのデータを集中管理し、限り、あなたはいつでも戻ってあなたのモデルを参照すると、あなたは、コントローラ間のデータを持っていることはありませんそれは同期していません。

関連する問題