2017-08-09 11 views
1

私はChildViewControllerを持っています。これはParentViewControllerのようにclass ChildViewController: ParentViewControllerから継承しています。私はそれがParentViewControllerをだとして、それが働いていないとは、実際の画面上に表示されていると仮定していスウィフト3:子ビューコントローラのコンテキストを取得

let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "anotherViewController") 
self.present(controller, animated: true, completion: nil) 

ParentViewControllerで私は次のコードを実行しようとしています。スニペットを機能させるためにChildViewControllerのコンテキスト(自己)を取得することは可能ですか?

ありがとうございました。

+2

質問を編集してください。 anotherViewControllerとChildViewController/ParentViewControllerの間の相関関係は何ですか? "私はそれが動作していないと仮定している..."何?あなたの現在の結果は何ですか?あなたの望む結果は何ですか? "彼は文脈(自己)を得ることは可能ですか"それをどこで得るのですか? "自己"はちょうど現在のインスタンスです... –

+0

@MaticOblak私はParentViewControllerから新しいビューコントローラを提示しようとしていますが、試してみるとアプリケーションがクラッシュします。 ParentViewControllerはChildViewControllerが継承しているもので、AnotherViewControllerは表示しようとしている別のView Controllerです。 – samson

+0

その後、クラッシュは何ですか? 1つのビューコントローラが別のビューコントローラを継承してもクラッシュは発生しません。親が子を提示していても、反対に親が親を提示しているか、子を提示しています。同じビューコントローラの任意の数のインスタンスをスタック/作成し、必要に応じて使用できます。 –

答えて

0

私は今あなたの問題を理解しています(そこに大きなIFがあります)、あなたは継承とあなたの "文脈"を理解できませんでした。

ParentViewControllerChildViewControllerのように2つのクラスがある場合、ChildViewControllerParentViewControllerのサブクラスです。 ParentViewControllerには、ChildViewControllerのアクセス/コンテキストはありませんが、ChildViewControllerのメソッドがあります...あなたの前提は間違っています!

あなたChildViewControllerParentViewControllerChildViewControllerずに自己参照を持つことになり、そのスーパーParentViewControllerのメソッドと、これらの方法のすべてのすべてを継承します。これは、メソッドAとメソッドBがある場合、子ビューコントローラでメソッドBをオーバーライドすることを意味します。親ビューコントローラがメソッドAのメソッドBを呼び出すと、オーバーライドされたメソッドが呼び出されます。つまり、方法Aは親ビューコントローラで呼び出されますが、メソッドBは子ビューコントローラで呼び出されます。だから、「子供」の文脈を得るという問題は決してありません。問題は、親としての自己の文脈を得ることができないかもしれないということです。しかし、これは設計どおりに作成されます。

あなたの質問にお答えします。はい、それは可能で、実際にあなたのために起こっています。親ビューコントローラのメソッドにブレークポイントを設定し、self(コンソールタイプ "po self")を印刷すると、そのタイプが実際に子ビューコントローラであることがわかります。

あなたが直面している問題は、おそらく他の何かの結果です。例外ブレークポイントを追加して、クラッシュが発生した場所を確認し、コンソールにログを表示してその内容を確認してください。

関連する問題