Почему EAAccessoryDidConnectNotification происходит дважды? - PullRequest
7 голосов
/ 29 июля 2011

У меня есть класс, который управляет сообщениями, приходящими и поступающими на внешний аксессуар для iPad. В инициализации у меня есть следующий код:

- (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];
    ...
}

в Deloloc У меня есть

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

По какой-то причине, когда я подключаю внешний аксессуар к iPad, accessoryDidConnect: срабатывает, за которым следует accessoryDidDisconnect: затем следует accessoryDidConnect:

Я не могу понять, почему я получу дополнительное подключение и отключение. Есть идеи?

Ответы [ 4 ]

5 голосов
/ 08 февраля 2013

фреймворк eaaccessory всегда будет запускать 2 сообщения о подключении и 2 сообщениях о отключении по какой-либо причине. У первой пары разъединения соединения не будет строк протокола, их можно игнорировать.

4 голосов
/ 29 июля 2011

Перейдите к этой последовательности.Сначала регистрируйся, потом для менеджера

[[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
2 голосов
/ 07 сентября 2011

Не ответ, но я не могу оставить комментарий.Я также вижу это двойное уведомление, используя код, указанный в ответе выше.Я также вижу это в примере кода EADemo, предоставленном Apple.

0 голосов
/ 02 октября 2017

Ответ на документацию: EAAccessoryDidConnectNotification

В некоторых случаях уведомление о соединении может быть отправлено до завершения аутентификации, что приводит к пустому массиву protocolStrings ипоследующее сообщение об отключении.Если это произойдет, другое сообщение о соединении будет отправлено позже, когда аутентификация пройдет успешно.

Это определенно не должно происходить все время, но если вы получаете эту последовательность подключения / отключения / подключения, проверьте строки протокола,Вероятно, это связано с ошибкой аутентификации.

...