2011-07-03 12 views
8

これはおそらくnoobの質問ですが、それのまわりで私の頭を取得することはできません。のXcode:ビューコントローラおよびアプリケーションの委任間の接続

は、どのように私は2 viewcontrollersまたはビューコントローラと私のappdelegate間の接続を作るのですか? 私は通常、やっていることは

@class RootViewController; 


@interface TabBarWithSplitViewAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> { 
    RootViewController *rootViewController; 



} 
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController; 

@end 

私のアプリデリゲート「H」ファイルに以下を追加して、Interface Builderで接続を作成することです。私のルートビューのコントローラからアプリケーションの代理人に自動的に教えてくれました。私が上記で追加したrootViewControllerです。

、あなたはアプリデリゲートの「M」ファイルこれを行う場合:

#import "RootViewController.h" 

NSLOG(@"Controller %@",rootViewController); 

Xcodeの4本で、それはあなたの接続

があることを示す数字の束を与えるしかし、あなたが知っているようにあなたは通常、もはや接続を作成することができmain.xibを持っていないので変更し、あなたがプログラム的にほとんどすべてのこれらの接続を行います。

rootViewController = [[RootViewController]alloc] init; 

を何も動いていないようにみえ:

i`veは「IBOutlet」せずに同じコードを使用してから追加することにすべてを試してみました。

は誰も助けることができますか?事前

+0

あなたは通知で見たことがありますか?私はXcode 4でそれを試していないが、それはあなたのために働くかもしれない。私は実際にそれらの間のコミュを持っている必要があるため –

+0

は、通知を使用することはできません。私のrootviewcontrollerのものをappdelegateから変更してください! – Ponchotg

答えて

16

おかげであなたは基本的にアプリのデリゲートであなたのビューコントローラのIVARを作成することになるでしょう。

ViewController *myVC; 
@property (nonatomic, retain) IBOutlet ViewController *myVC; 

次に、実装ファイルで合成します。

そして、ビューコントローラの負荷が、この線に沿って何かを呼び出すとき:この時点で

- (void)viewDidLoad { 
    AppDelegateClass *appDelegate = (AppDelegateClass *)[[UIApplication sharedApplication] delegate]; 
    appDelegate.myVC = self; 
} 

を、あなたは今のアプリデリゲートから、あなたのビューコントローラに直接接続しています。同様に、ビューコントローラからアプリケーションデリゲートメソッドを呼び出すこともできます。その場合は、ビューコントローラのヘッダーにデリゲートを設定します。

id delegate; 
@property (nonatomic, assign) id delegate; 

これを再度実装ファイルで合成します。

あなたがviewDidLoadにあるとき今、あなたはこのような何か呼びたい:あなたが軌道に乗るために必要なものを与える必要があります

- (void)viewDidLoad { 
    self.delegate = (AppDelegateClass *)[[UIApplication sharedApplication] delegate]; 
} 

をので、私はそれはあなたがこれを行うことができます

+2

私はこれが古いスレッドだと知っていますが、これは本当に別個の質問にはふさわしくないと思います。私はあなたの最初の部分(接続viewController-> appDelegate)を試しましたが、 'appDelegate.myVC = self' '' int * 'へのObjective-Cポインタの暗黙的な変換は、ARC "'では禁止されています。答えはARC以外でしたか?もしそうなら、私を助けてもらえますか? – tomsmeding

+0

これはARC前に書かれたものですが、 'retain'や' release'が呼び出されていないので、影響を受けてはいけません。適切な '@property'関数が用意されていることを確認してください(この場合、@property(非原子的で強力な)id delegate'のようなものになります)。また、正しい変数を渡していることを確認してください。受け取っているエラー、特に 'int *'の部分は間違いなく見てください。 'int'はポインタとして渡すべきではありません。つまり' int * 'です。私は助けることを願って – justin

関連する問題