Cocoa 选择器作为属性问题
在我的类中,我有这个属性:Cocoa 选择器作为属性问题,cocoa,notifications,Cocoa,Notifications,在我的类中,我有这个属性:@property SEL didStartRestoreSelector然后将其合成为@synthesis-didStartRestoreSelector 在我的类中,我有以下行:[[NSDistributedNotificationCenter defaultCenter]addObserver:self-selector:DidStartStoreSelector名称:@“restoreHasStarted”对象:nil] 我希望自己能够使用该属性设置选择器,但不
@property SEL didStartRestoreSelector
然后将其合成为@synthesis-didStartRestoreSelector代码>
在我的类中,我有以下行:[[NSDistributedNotificationCenter defaultCenter]addObserver:self-selector:DidStartStoreSelector名称:@“restoreHasStarted”对象:nil]代码>
我希望自己能够使用该属性设置选择器,但不幸的是,它没有按预期工作。我就是这样做的:
USBBackupFramework*framework = [[USBBackupFramework alloc] init];
framework.didBeginBackupSelector = @selector(didBegin);
不幸的是,didbegen
从未被调用。相反,控制台输出以下内容:
2010-12-05 20:27:24.376 Framework Test App[5228:a0f] -[USBBackupFramework <null selector>]: unrecognized selector sent to instance 0x10013f0d0
2010-12-05 20:27:24.376框架测试应用程序[5228:a0f]-[USBBackupFramework]:发送到实例0x10013f0d0的无法识别的选择器
但是选择器不是空的,我设置了一个
为什么不起作用?是类的init
方法中的addObserver:
行吗?如果是这样,那么它将使用didStartRestoreSelector
或didBeginBackupSelector
的值,因为它恰好在该时间点存在(将为NULL
)。初始化后所做的任何更改都不会自动拾取
相反,您可以修改构造函数以在初始化时使用选择器,或者动态实现该属性,以便setDidStartRestoreSelector:
将取消并重新注册对象以进行分布式通知。您也可以是观察自己的didStart*选择器的键值,然后在观察方法中,取消注册旧的观察选择器并注册新的观察选择器