0

基本的に、私はアプリケーションの起動時に読み込むviewControllerを持っています。そのVCでは、ユーザーデータがあるかどうかによって、どちらかのログインでModalViewを提供します。ユーザーがログインした後、私はmodalViewを閉じることができますが、オープナーでメソッドを呼び出して、データをテーブルに取り込みたいと思います。 オープナービューにあるModalViewからメソッドを呼び出す

は私が..

任意の提案は、私が

[self.parentViewController loadInitialData]; 
[self.dismissModalViewControllerAnimated:YES]; 

が、それが動作しないような何かを行うことができmodalViewから思いましたか?

+0

このloadInitialDataです:方法あなたの?それが正しく実装されている場合、これは何の問題もないはずです。何が動作していませんか?あなたは何を試しましたか?私たちは助けるためにもう少し情報が必要です。 –

答えて

5

問題は、self.parentViewControllerが "UIViewController"タイプであり、-loadInitialDataメソッドがUIViewControllerに存在しないためです。この問題を解決する一般的な方法がいくつかあります:最も簡単で最も難しいものから最も複雑で最も正しいものまで

1)まず、あなたのself.parentViewControllerをあなたのタイプにキャストする必要があります親ビューコントローラ。ような何か:

MyParentViewController *parentVC = (MyParentViewController*)self.parentViewController; 
[parentVC loadInitialData]; 

2)あなたは、明示的に自分の親ビューコントローラへの参照を保持し、あなたのモーダルビューコントローラにプロパティを追加して、それを行うloadInitialDataを呼び出すことができます。

@interface MyModalViewController : UIViewController { 
    MyParentViewController *myParentViewController; 
} 

@property (nonatomic, retain) MyParentViewController *myParentViewController; 

次にあなたが呼び出すことができます。

[self.myParentViewController loadInitialData]; 

3)それを行うための最も複雑な、しかし最も正しい方法は、あなたのParentViewControllerはプロトコルを実装し、あなたのモーダルビューを持っている、委任プロトコルを作成することですコントローラはデリゲートへの参照を保持し、そのように呼び出します。次のようなものがあります。

@protocol ManageDataDelegate 

- (void) loadInitialData; 

@end 


@interface MyParentViewController : UIViewController <ManageDataDelegate> { ... 


@interface MyModalViewController : UIViewController { 
    id<ManageDataDelegate> delegate; 
} 

@property (nonatomic, assign) id<ManageDataDelegate> delegate; 

モーダルビューコントローラを表示するときは、デリゲートを設定します。あなたのMyParentViewControllerで:

MyModalViewController *vc = [[MyModalViewController alloc] init]; 
vc.delegate = self; 
[self presentModalViewController:vc]; 

その後、あなたのモーダルビューコントローラにそうようにコールバックすることができます。

[self.delegate loadInitialData]; 
+0

デリゲートの使用は、クラスの依存関係を切り離すための最良の方法です。 iTunes UからiOSのスタンフォード大学で提供された最近の講義の1つをご覧ください。 –

+0

ありがとうございました。それは私のためにそれを分類した。 – Critter

+0

@David - 私はそれらを見ていきます。ヘッドアップをありがとう... – Critter

関連する問題