为什么EAAccessoryDidConnectNotification会发生两次?

Sam*_*Sam 7 accessory nsnotificationcenter ipad ios

我有一个课程来管理来自和外部附件到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];
    ...
}
Run Code Online (Sandbox Code Playgroud)

在dealloc我有

- (void) dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidDisconnectNotification object:nil];
    [[NSNotificationCenter defaultCenter] removeObserver:self name:EAAccessoryDidConnectNotification object:nil];
    [[EAAccessoryManager sharedAccessoryManager] unregisterForLocalNotifications];    
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我将外部附件连接到iPad时,accessoryDidConnect:会触发一个accessoryDidDisconnect:随后是accessoryDidConnect:

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

小智 5

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


Vij*_*com 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
Run Code Online (Sandbox Code Playgroud)