为什么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失败有关。