我的框架中有一个选择器作为属性,这是用户可以设置的属性。
这是属性:@property SEL didBeginBackupSelector;
所以在我的班上我合成它并像这样实现它:
if (self.didBeginBackupSelector != nil)
{
[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:self.didBeginBackupSelector name:@"backupHasStarted" object:nil];
}
然后我编译框架并实现它。
framework.didBeginBackupSelector = @selector(didBegin:);
但是它不是在我的类中调用选择器,而是尝试在框架的类中调用didBegin:
。
我错过了什么?
答案 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在注册后发生变化,这也会有效。