为什么EAAccessoryDidConnectNotification发生两次?

我有一个class级pipe理来自iPad的外部附件的信息。 在init中我有以下代码:

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

在dealloc我有

 - (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:

我无法弄清楚为什么我会得到一个额外的连接和断开连接。 有任何想法吗?

eaaccessory框架总是会由于某种原因触发2个连接和2个断开通知。 第一个连接断开对将没有协议string,您可以忽略这些。

不是一个答案,但我不能发表评论。 我也看到这个双重通知使用上面的答案中提供的代码。 我也在Apple提供的EADemo示例代码中看到它。

改变到这个序列。 首先通知注册然后经理

 [[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 

答案是EAAccessoryDidConnectNotification的文档

在某些情况下,可能会在authentication完成之前发送连接通知,导致一个空的protocolStrings数组和一个随后的断开连接消息。 如果发生这种情况,则在稍后validation成功时发送另一条连接消息。

绝对不应该一直发生,但是如果您收到此连接/断开/连接序列,请检查协议string。 这可能与authentication失败有关。