选择器作为属性问题

时间:2010-12-05 20:45:35

标签: cocoa notifications

在我的班级中我有这个属性:@property SEL didStartRestoreSelector;然后将其合成为@synthesize didStartRestoreSelector;

在我的班上,我有以下几行:[[NSDistributedNotificationCenter defaultCenter] addObserver:self selector:didStartRestoreSelector name:@"restoreHasStarted" object:nil];

我希望自己能够使用属性自己设置选择器,但不幸的是它无法按预期工作。我就这样做了:

USBBackupFramework*framework = [[USBBackupFramework alloc] init];
framework.didBeginBackupSelector = @selector(didBegin);

不幸的是didBegin永远不会被调用。相反,控制台输出:

2010-12-05 20:27:24.376 Framework Test App[5228:a0f] -[USBBackupFramework <null selector>]: unrecognized selector sent to instance 0x10013f0d0

虽然选择器不是null,但我设置了一个。

为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

您班级addObserver:方法中的init行?如果是这样,那么它将使用didStartRestoreSelectordidBeginBackupSelector的值,因为它恰好存在于该时间点(将是NULL)。初始化后所做的任何更改都不会自动获取。

相反,您可以修改构造函数以在初始化时使用选择器,或者您可以动态实现该属性,以便setDidStartRestoreSelector:将取消并重新注册对象以进行分布式通知。