这是代表
@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中):
DropController* dropHelper = [DropController sharedController];
dropHelper.delegate = self;
我能够在一个控制器中接收呼叫,但不能在另一个控制器中接收(代码是模仿),这让我发疯了!
答案 0 :(得分:2)
正如我在评论中所说,由于您正在使用该对象的共享实例,它将覆盖以前设置的委托给新对象。所以我建议你在sharedController中保存一个数组。将对象添加到该数组,该数组将成为sharedController的委托。
然后遍历该数组并在其中的每个对象上调用该方法。它很简单。
编辑:
当您在viewcontroller A
中使用语句dropHelper.delegate = self;
分配委托时,对象A成为委托。调用方法[delegate openUserButtons];
将触发viewcontroller A
中的方法。但是当您在viewcontroller B中执行dropHelper.delegate = self;
时,[delegate openUserButtons];
将调用对象B中的方法。它不会同时调用a和b中的方法。由于只有一个委托变量,并且您正在使用共享单例对象。