Why does EAAccessoryDidConnectNotification occur twice?
I have a class that manages messages coming from and going to an external accessory to an iPad. In the init I have the following code:
- (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];
...
}
in dealloc I have
- (void) dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidDisconnectNotification object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidConnectNotification object:nil];
[[EAAccessoryManager sharedAccessoryManager] unregisterForLocalNotifications];
}
For some reason, when I connect the external accessory to the i开发者_Go百科Pad the accessoryDidConnect: fires followed by an accessoryDidDisconnect: followed by accessoryDidConnect:
I can't figure out why I would get an extra connect and disconnect. Any ideas?
the eaaccessory framework will always fire 2 connect and 2 disconnect notifications from some reason. The first connect disconnect pair will have no protocol strings, you can ignore these.
Change to this sequence. First notification register then for manager
[[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
Not an answer but I can't post a comment. I'm seeing this double notification too using the code provided in the answer above. I am also seeing it in the EADemo sample code provided by Apple.
The answer is on the documentation of EAAccessoryDidConnectNotification
In some cases, the connection notification may be sent before authentication has completed, resulting in an empty protocolStrings array and a subsequent disconnection message. If this happens, another connection message is sent later, when authentication succeeds.
It's definitely not supposed to happen all the time, but if you receive this connected / disconnected / connected sequence, check the protocol strings. It's probably related to the authentication failing.
精彩评论