类未接收委托通知

时间:2009-11-16 07:48:15

标签: iphone objective-c cocoa-touch

我创建了一个实现UIAccelerometerDelegate的类(TestAccel)。我在UIAccelerometer这个类中有一个私有变量。

UIAccelerometer *accel;

类init看起来像这样:

- (id) init:(id)actOnThisInstance{
[self init];
accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = actOnThisInstance;
return self;
}

调用者(ViewController)像这样初始化

accel = [[Acc alloc]init:self];

TestAccel从未收到任何有关shouldAutorotateToInterfaceOrientation实现的通知。然后我在调用者中实现UIAccelerometerDelegate。呼叫者收到通知但TestAccel仍然没有收到任何通知。我有什么想法吗?

我的目标是创建一个在处理调用类的UIAccelerometerDelegate通知时自包含的类。我希望调用者不要实现UIAccelerometerDelegate,但不确定是否可行。

1 个答案:

答案 0 :(得分:1)

如果您只想指定“self”,则无需传入对象以指定为加速度计的委托。您实际上是将视图控制器指定为委托(在视图控制器中,“self”是视图控制器)。

您可能不需要TestAccel类的多个init方法。这只是一个建议。当然,如果你只使用一种方法,请记得首先调用[super init]。例如:

- (id) init {
    if (self = [super init]) {
        // other TestAccel init stuff here
        accel = [UIAccelerometer sharedAccelerometer];
        accel.delegate = self; // assign self as delegate
    }
    return self;
}

并且,在视图控制器中,您应该分配并初始化TestAccel对象(而不是Acc对象):

accel = [[TestAccel alloc] init];

另外,TestAccel应该实现UIAccelerometerDelegate协议,你的视图控制器不应该。

<强>更新
使用更好的编码实践在init方法中设置self。