在我的课堂上,我具有以下属性:@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,但我确实设置了一个。

为什么这不起作用?

最佳答案

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

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

关于cocoa - 选择器作为属性问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4361060/

10-14 16:27