Делегат работает в контроллере A, но не в контроллере B - PullRequest
0 голосов
/ 24 августа 2011

Это делегат

@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;

Я могу принимать вызовы в одном контроллере, но не в другом контроллере (код повторяет), это сводит меня с ума!

1 Ответ

2 голосов
/ 24 августа 2011

Как я уже сказал в моем комментарии, поскольку вы используете общий экземпляр этого объекта, он перезапишет ранее установленный делегат новому объекту.Так что я бы предложил держать массив в вашем sharedController.Добавьте объекты в этот массив, которые захотят стать делегатами для sharedController.

Затем выполните итерацию по этому массиву и вызовите метод для каждого объекта в нем.Это довольно просто.


Редактировать:

Когда вы назначаете делегата в вашем viewcontroller A с оператором dropHelper.delegate = self;, объект A становится делегатом.Вызов метода [delegate openUserButtons]; вызовет метод в viewcontroller A.Но когда вы делаете dropHelper.delegate = self; в viewcontroller B, [delegate openUserButtons]; будет вызывать метод в объекте B. Он не будет вызывать оба метода из a и b.Поскольку существует только одна переменная-делегат, и вы используете общий одноэлементный объект.

...