2011-07-29 6 views
7

저는 iPad에서 외부 액세서리로 전송되는 메시지를 관리하는 클래스를 운영하고 있습니다.왜 EAAccessoryDidConnectNotification이 두 번 발생합니까?

내가 어떤 이유로

- (void) dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidDisconnectNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidConnectNotification object:nil]; 
    [[EAAccessoryManager sharedAccessoryManager] unregisterForLocalNotifications];  
} 

을 가지고의 dealloc에서

- (id) init 
{ 
    self = [super init]; 
    if (!self) return; 

    [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; //we want to hear about accessories connecting and disconnecting 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(accessoryDidConnect:) 
               name:EAAccessoryDidConnectNotification 
               object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(accessoryDidDisconnect:) 
               name:EAAccessoryDidDisconnectNotification 
               object:nil]; 
    ... 
} 

나는 아이 패드에 accessoryDidConnect를 외부 액세서리를 연결할 때 : accessoryDidDisconnect 다음에 불을 : 다음은 init에서 나는 다음과 같은 코드가 있습니다 accessoryDidConnect :

추가 연결 및 연결 해제 이유를 알 수 없습니다. 어떤 아이디어?

답변

3

이 순서로 변경하십시오. 관리자를위한 첫 번째 알림 등록

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(accessoryDidConnect:) 
              name:EAAccessoryDidConnectNotification 
              object:nil]; 


[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(accessoryDidDisconnect:) 
              name:EAAccessoryDidDisconnectNotification 
              object:nil]; 



[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; //we want to hear about accessories connecting and disconnecting 
+0

업데이트하고 확인해보십시오. –

+0

글쎄, 지금 올바르게 작동하고있는 것 같습니다. accessoryDidConnect/accessoryDidDisconnect 메시지를 한 번만 얻습니다. 이는 좋은 것입니다. 그러나 registerForLocalNotifications가 호출되는 순서와 관련이없는 것처럼 보입니다. 그러나 내가 찾은 모든 문서는 당신이 여기있는 순서대로 등록 전화를합니다. 나는 그것을 조금 뒤로하고있는 것처럼 보인다. 진짜 문제는 EAAccessory 객체의 참조 카운팅에있을 수 있다고 생각합니다. 최근에이 코드 영역에는 많은 코드 변경 사항이 있었지만 이들은 나로부터 나왔습니다. 나는 그 (것)들을 한 dev에 이야기하고, ... – Sam

+0

그는 왜 그 통지가 지금 단 한번오고 있는지 확실하지 않다. 부수적으로, 스레드가 실행되는 대상의 참조 횟수가 증가한 것을 인식하지 못 했으므로 참조 카운팅이 해제되었습니다. 아무리해도 갑자기 왜 제대로 작동하는지 100 % 확신 할 수는 없지만 이것을 답변으로 표시하겠습니다. – Sam

2

답변이 없지만 댓글을 게시 할 수 없습니다. 위의 대답에서 제공된 코드를 사용하여이 두 가지 알림을 볼 수 있습니다. Apple에서 제공 한 EADemo 샘플 코드에서도이 기능을 볼 수 있습니다.

+0

그래서 순서를 변경합니다. NSNotificationCenter 옵저버와 EAAcessoryNotification에 등록하는 것이 도움이되지 않았습니까? 위에서 말했듯이 갑자기 왜 이것이 제대로 작동하기 시작했는지 확신 할 수 없습니다. 연결을 한 번만하면 연결을 다시 확인합니다 (다른 액세서리에도 연결되는 새 앱에서 작업). 나는이 문제가 나를 미치게 만들었다는 것을 기억한다. – Sam

+0

+1에 대한 토론에 참여한 분 – Sam

+0

코드 순서를 오른쪽으로 변경해도 큰 차이는 없습니다.또한 (그냥 뭔가 시도하기 때문에) 내 rootviewController 대신 응용 프로그램 대리인에서 알림을 설정하려고했습니다. 그렇다면 애플의 데모를 시도하고 동일한 연결/연결 끊기/연결 동작을 얻었다. 내가 가지고있는 카메라 커넥터가 아닙니다. 저는 또한 미디 장치를 가지고 있으며 같은 결과를 얻습니다. 유일하게 남아있는 것은 (내가 생각할 수있는) 내 iPad 커넥터가 dodgey라는 것입니다. 또는 내 libusb로 계속해서 교묘하게 처리하고 있습니다. 또한 Kinect/OpenNI와 함께 작업하고 있습니다. 그리고 아마도 나는 시스템 적으로 뭔가를 망쳤습니다. –

5

eaaccessory 프레임 워크는 어떤 이유로 든 2 개의 연결 및 2 개의 연결 해제 알림을 항상 실행합니다. 첫 번째 연결 단절 쌍에는 프로토콜 문자열이 없으므로 무시할 수 있습니다. 인증 빈 protocolStrings 어레이 및 후속 해제 메시지 생성이 완료되기 전에

0

대답은 어떤 경우 EAAccessoryDidConnectNotification

의 문서에 연결 통지가 전송 될 수도있다. 이 경우 인증이 성공하면 나중에 다른 연결 메시지가 전송됩니다.

항상 발생하는 것은 아니지만이 연결/연결 해제/연결 시퀀스를 수신 한 경우 프로토콜 문자열을 확인하십시오. 그것은 아마도 인증 실패와 관련이 있습니다.

관련 문제