7

我有一个类来管理来自和去往 iPad 外部附件的消息。在初始化中,我有以下代码:

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

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

4

4 回答 4

5

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

于 2013-02-08T16:25:41.883 回答
4

改成这个顺序。首先通知注册然后为经理

[[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
于 2011-07-29T14:50:07.107 回答
2

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

于 2011-09-07T17:44:03.417 回答
0

答案在文档中EAAccessoryDidConnectNotification

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

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

于 2017-10-02T11:45:12.057 回答