문제

각 레벨마다 다른 컨트롤러를 사용하는 게임을 개발하고 있습니다. 가속도계를 통해 쉐이크를 감지해야하므로 SO와 같은 대의원으로 등록합니다.

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval; 

레벨이 끝나면이 컨트롤러는 거래되고 해제됩니다. 이전에는 UIACCELEROMERT에서 대의원을 제외하지 않았기 때문에이 컨트롤러가 해방 된 후 충돌이 발생했습니다 (즉, 여전히 해방 된 객체로 이벤트를 보내고있었습니다). 이제 Dealloc의 내부에서 저는 이것을하고 있습니다.

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = nil;

모든 것이 좋고 좋으며 첫 번째 레벨은 장애없이 재생됩니다. 문제는 다음 단계로 가서 새로운 레벨 컨트롤러를 만들고 첫 번째 코드 배치를 다시 실행할 때 발생합니다 (새 콘톨러를 현재 대의원으로 설정). 그 후, 나는 가속도계에서 전화를받지 않습니다.

따라서 문제는 가속도계에 대한 앱 당 하나의 대표단을 가질 수 있습니까, 아니면 내가 뭔가 빠진 것입니까? 문서에서 대의원을 여러 번 설정하는 것을 보지 못했습니다. 나는 OBJ-C에 약간 익숙하지 않지만, 내가 이해하는 한, 이것은 너무 정통하지 않아야합니다.

참고 : 3.0에서는 쉐이크 알림을들을 수 있다는 것을 알고 있습니다. 불행히도, 나는 쉐이크에 관심이있는 시간 내내 첫 번째 응답자가되기 위해 다른 것이 필요합니다. 그래서 나는 그 옵션을 리팩터링 할 수 없습니다.

도움이 되었습니까?

해결책

일반적으로 대의원이있는 물건에는 한 번에 하나만 있습니다. 달리 문서화되지 않는 한, 특정 인스턴스의 수명에 따라 하나 이상의 다른 객체를 위임으로 설정하는 데 제한이 없어야합니다.

무슨 일이 일어나고 있는지 궁금합니다. 첫 번째 컨트롤러가 dealloc에드 ~ 후에 두 번째 컨트롤러를 가속기 대의원으로 설정했습니다. 당신이 기대하는 순서대로 모든 일이 일어나고 있는지 확신하기 위해 디버거를 사용하여 해당 코드를 보았습니까?

다른 팁

가능한 해결책은 다른 클래스, 아마도 앱 대의원이 Uiaccelerometer의 대의원 역할을하며 해당 클래스가 수신 할 때 사용자 정의를 보내도록하는 것입니다. accelerometer:didAccelerate: 메시지. 관심있는 가속도 유형을 감지 할 때만 메시지를 보낼 수 있거나 매번 알림을 보낼 수 있으며 알림의 일부로 Uiacceleration 매개 변수를 포함시킬 수 있습니다. userInfo. 가속 데이터에 관심이있는 컨트롤러는 필요에 따라 알림에 등록 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top