2009-11-16 3 views
1

UIAccelerometerDelegate를 구현하는 클래스 (TestAccel)를 만들었습니다. 이 클래스에는 UIAccelerometer 용 private var가 있습니다.클래스가 대리자 알림을 수신하지 않음

UIAccelerometer *accel; 

클래스의 초기화는 다음과 같습니다

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

호출자의 (a의 ViewController)이

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

TestAccel 결코 shouldAutorotateToInterfaceOrientation의 구현에 모든 알림을 수신없는 것처럼 초기화합니다. 그런 다음 호출자에 UIAccelerometerDelegate를 구현합니다. 호출자는 알림을 받지만 TestAccel은 여전히 ​​아무 것도받지 못합니다. 내가 뭘 잘못하고 있는거야?

저의 목표는 호출 클래스에 대한 UIAccelerometerDelegate 알림 처리에 자체적으로 포함 된 클래스를 만드는 것입니다. 호출자가 UIAccelerometerDelegate를 구현하지 못하도록하고 싶지만 가능한지 확실하지 않습니다.

답변

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; 
} 

그리고, 뷰 컨트롤러, 당신은 ALLOC하고 TestAccel 개체 (하지에 ACC 개체) init을한다 : 또한

accel = [[TestAccel alloc] init]; 

을 TestAccel는 UIAccelerometerDelegate 프로토콜과보기를 구현해야합니다 컨트롤러가 없어야합니다.

업데이트
init 메서드에서 self를 설정하는 데 더 나은 코딩 방법을 사용하십시오.

+0

+1 좋은 답변입니다. 나는 다음을 사용하는 것을 권할 것이다 :'if (! (self = [super init])) {return nil; }'단순히'[super init]'대신에. 결론은 http://www.wilshipley.com/blog/2005/07/self-stupid-init.html –

+0

을 참조하십시오. Acc 할당은 오타였습니다. 나는 가지고있는 것을 따라 갔지만 여전히 TestAccel에서 알림을받지 못했습니다. 델리게이트를 구현했습니다 : @interface TestAccel : NSObject . 이상한 점은 뷰 컨트롤러에서 shouldAutorotateToInterfaceOrientation을 구현하면 위임을 구현하지 않지만 알림을 얻게된다는 것입니다. 어떤 아이디어? – 4thSpace

+0

shouldAutorotateToInterfaceOrientation : 재정의 할 수있는 UIViewController 메서드입니다. UIAccelerometerDelegate와 관련이 없습니다. 가속도계 : didAccelerate :. – gerry3

관련 문제