Tengo una clase que gestiona los mensajes que provienen de un accesorio externo de un iPad. En el init Tengo el siguiente código:¿Por qué EAAccessoryDidConnectNotification se produce dos veces?
- (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];
...
}
en dealloc tengo
- (void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidDisconnectNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidConnectNotification object:nil];
[[EAAccessoryManager sharedAccessoryManager] unregisterForLocalNotifications];
}
Por alguna razón, cuando conecto el accesorio externo a la IPAD el accessoryDidConnect: incendios seguidos de un accessoryDidDisconnect: seguido por accessoryDidConnect:
No entiendo por qué me gustaría conectarme y desconectarme. ¿Algunas ideas?
actualizado y compruébalo –
Bueno, las cosas parecen estar funcionando correctamente ahora. Solo recibo un mensaje de accesorioDidConnect/accessoryDidDisconnect una vez, lo cual es bueno. Sin embargo, parece no estar relacionado con el orden en que se llama registerForLocalNotifications. Pero, toda la documentación que he encontrado hace la llamada de registro en el orden que tiene aquí. Parece que lo estoy haciendo un poco al revés. Creo que el verdadero problema pudo haber sido en mi recuento de referencias del objeto EAAccessory. Ha habido muchos cambios de código últimamente en esta área de código, pero no fueron por mí. Hablé con el desarrollador que los hizo, y ... – Sam
No está seguro de por qué esas notificaciones solo están llegando una vez. Como nota al margen, nuestro recuento de referencias no se realizó porque no nos dimos cuenta de que el enhebrado aumentaba el recuento de referencias del objetivo en el que se ejecuta el hilo. De todos modos, marcaré esto como la respuesta a pesar de que no estoy 100% seguro de por qué esto de repente funciona bien. – Sam