框架问题中的选择器

时间:2010-12-08 20:36:05

标签: cocoa frameworks selector

我的框架中有一个选择器作为属性,这是用户可以设置的属性。

这是属性:@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 :(得分:0)

在您的代码段中,您引用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在注册后发生变化,这也会有效。