开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜