为什么EAAccessoryDidConnectNotification会发生两次?

时间:2011-07-29 14:41:29

标签: ios ipad nsnotificationcenter accessory

我有一个班级来管理来自和转到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:触发,然后是来自附件IDDisconnect:nextDidConnect:

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

4 个答案:

答案 0 :(得分:5)

eaaccessory框架将始终从某种原因触发2个连接和2个断开连接通知。第一个连接断开线对没有协议字符串,您可以忽略它们。

答案 1 :(得分:3)

更改为此序列。然后是第一个通知注册管理员

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

答案在于EAAccessoryDidConnectNotification

的文档
  

在某些情况下,可以在身份验证完成之前发送连接通知,从而导致空的protocolStrings数组和随后的断开连接消息。如果发生这种情况,稍后会在身份验证成功时发送另一条连接消息。

它绝对不应该一直发生,但是如果你收到这个连接/断开/连接的序列,检查协议字符串。它可能与身份验证失败有关。