2017-05-24 7 views
0

コントローラA(CDCFaderController)からコントローラB(CDCSendsViewController)にデータを渡す方法を作成しようとしています。コントローラAはビューを所有していますが、アクセスしたいいくつかの追加機能があるので、データをコントローラBに表示します。デリゲート/プロトコルを正常に動作させる問題

私のロジックは、コントローラAでデリゲートをセットアップし、それをコントローラBで受信して使用することでした。

現在、私はそれが動作を取得するための試験としてこれを持っている:

コントローラーAの.h

@protocol CDCSendsControllerDelegate <NSObject> 
-(void)test:(NSString*)str; 
@end 

@interface CDCFaderController : UIViewController 
<UIScrollViewDelegate, CDCControlDelegate, CDCFadersSideBarDelegate> 

@property (nonatomic, weak) id <CDCSendsControllerDelegate> delegate; // delegate synthesis 

コントローラーA .M

-(void)delegateTest { 
    [self.delegate test:@"Hello world!"]; 
} 

と受信コントローラBで:

コントローラB .h

@interface CDCSendsViewController : UIViewController 
<CDCControlDelegate, CDCSendsControllerDelegate> 

コントローラーB .mを

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSLog(@"VDL CALLED"); 
    CDCFaderController * faderController = [[CDCFaderController alloc] init]; 
    faderController.delegate = self; 
} 

-(void) test:(NSString*)str{ 
    NSLog(@"%@", str); 
} 

私が考えたアイデアは、私がコントローラーBをロードしたとき、それはコントローラAから印刷を通じて引き出して、情報を表示するであろうということでしたか?

コントローラAはビューの所有者であるため、実際にはコントローラBはビューによってインスタンス化されません。だから私はBをコールし、Aからのデータを正しく引き出してこれを動作させる方法を考えていましたか? Bは、渡されたデータの一部を使用してAにサポート機能を追加するバックグラウンドコントローラです。

これは私が詳細を提供するのに役立ちます。

+0

あなたは委任をトリガーしていますか? –

+0

これは問題の原因となる可能性があります。私はそれがコントローラBの負荷を見てトリガしたと仮定?コントローラAをインスタンス化し、デリゲートを自己に設定します。 – jcad

+0

delegateTestはどこから呼び出していますか? – user3575114

答えて

0

私は上記のコードを見ました。実際には、あなたのCDCFaderControllerは、viewDidLoadメソッドでローカルに初期化されます。 ARCは、viewDidLoadが実行された後に、そのコントローラオブジェクトを解放します。これは、デリゲートnilも同様にどこでも使用されなくなるためです。

CDCFaderControllerの性質を親切にして初期化します。その後、正常に動作するはずです。

関連する問題