2011-08-24 3 views
0

このデリゲート委任は、コントローラAにはなく、コントローラBで動作

@protocol DropControllerDelegate; 

@interface DropController : NSObject 
    id<DropControllerDelegate> delegate; 
} 

@property (nonatomic, assign) id<DropControllerDelegate> delegate; 
+ (DropController*) sharedController; 

@protocol DropControllerDelegate <NSObject> 
- (void)openUserButtons; 
- (void)startUpload; 
- (void)uploadDone; 
- (void)uploadFailed; 
- (void)startDownload; 
- (void)downloadDone; 
- (void)subFolderLoaded; 
@end 

これはシングルトンコードである:

static DropController *sharedCont = nil; 

#pragma mark Singleton stuff 

+ (DropController *) sharedController { 
    @synchronized(self)  { 
     if (!sharedCont) 
      sharedCont = [[DropController alloc] init]; 
     return sharedCont; 
    } 
    return sharedCont; 
} 

デリゲートを設定するコードはmyControllerAとmyControllerB両方で(あります):

私は1つのコントローラでコールを受信できますが、他のコントローラではコールを受信できません(コードはコピーキャット)、これは私を夢中にさせている!

+1

これがシングルトンの場合、前にデリゲートセットをオーバーライドしています。 –

+0

あなたの*他の*コントローラではどういう意味ですか?あなたがシングルトンを呼んでいるように見えます。 – Perception

+0

シングルトンは問題ではない、私は魅力のように動作する代理人と別の共有オブジェクトを持っています。 – Enlil

答えて

2

私のコメントでは、そのオブジェクトの共有インスタンスを使用しているので、以前に設定したデリゲートを新しいオブジェクトに上書きします。だから私はあなたのsharedControllerで配列を保持することをお勧めします。その配列に、sharedControllerへのデリゲートになりたいオブジェクトを追加します。

次に、その配列を反復処理し、その中の各オブジェクトのメソッドを呼び出します。それはかなりシンプルです。


編集:文dropHelper.delegate = self;オブジェクトAが代理人となって、あなたのviewcontroller Aにデリゲートを割り当てる

。メソッド[delegate openUserButtons];を呼び出すと、メソッドはviewcontroller Aにトリガーされます。しかし、ビューコントローラBでdropHelper.delegate = self;を実行すると、[delegate openUserButtons];はオブジェクトBのメソッドを呼び出します。メソッドはaとbの両方を呼び出すことはありません。デリゲート変数は1つしかなく、共有シングルトンオブジェクトを使用しているためです。

+0

私は、 forループを使用します。 –

+0

とおそらく、代議員ではなく解決するために通知を使用する候補者です。 – gamozzii

+0

質問を編集してシングルトンのものを追加しました。より明確にするために – Enlil

関連する問題