селектор в рамочном вопросе - PullRequest
0 голосов
/ 08 декабря 2010

У меня есть селектор в качестве свойства в моей структуре, которое может быть установлено пользователем.

Вот свойство: @property SEL didBeginBackupSelector;

Так что в моем классе я синтезирую и реализую это так:

if (self.didBeginBackupSelector != nil)
{
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:self.didBeginBackupSelector name:@"backupHasStarted" object:nil];
}

Затем я компилирую фреймворк и реализую его.

framework.didBeginBackupSelector = @selector(didBegin:);

Но вместо того, чтобы вызывать селектор в моем классе, он пытается вызвать didBegin: в классе фреймворка.

Что мне не хватает?

1 Ответ

0 голосов
/ 09 декабря 2010

В своем фрагменте кода вы ссылаетесь на self, что относится к вашему классу фреймворка, а не к вызывающему.У вашей техники также есть другая проблема, которая заключается в том, что если didBeginBackupSelector изменится после того, как вы зарегистрируетесь для уведомления, он будет работать не так, как ожидалось.Я бы порекомендовал вам сделать что-то вроде этого:

В вашем .h:

@property (nonatomic) SEL didBeginBackupSelector;
@property (nonatomic, assign) id didBeginBackupTarget;

В вашем .m:

// where you first want to register
// [[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:@selector(backupHasStartedNotification:) name:@"backupHasStarted" object:nil];

// somewhere else in your file
- (void)backupHasStartedNotification:(NSNotification *)notification {
    if (self.didBeginBackupSelector) {
        [self.didBeginBackupTarget performSelector:self.didBeginBackupSelector withObject:notification];
    }
}

Это будет работать, даже еслиdidBeginBackupSelector и didBeginBackupTarget изменяются после регистрации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...