Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么EAAccessoryDidConnectNotification发生两次?_Ios_Ipad_Nsnotificationcenter_Accessory - Fatal编程技术网

Ios 为什么EAAccessoryDidConnectNotification发生两次?

Ios 为什么EAAccessoryDidConnectNotification发生两次?,ios,ipad,nsnotificationcenter,accessory,Ios,Ipad,Nsnotificationcenter,Accessory,我有一个类,它管理来自iPad外部附件的消息和来自iPad外部附件的消息。在init中,我有以下代码: - (id) init { self = [super init]; if (!self) return; [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications]; //we want to hear about accessories connecting and

我有一个类,它管理来自iPad外部附件的消息和来自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];
    ...
}
事实上,我有

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


我不明白为什么我会得到一个额外的连接和断开。有什么想法吗?

换成这个顺序。先注册通知,然后注册经理

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

没有答案,但我不能发表评论。我看到这个双重通知也使用了上面答案中提供的代码。我也在苹果公司提供的EADemo示例代码中看到了这一点。

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

答案在的文档中

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


这种情况肯定不会一直发生,但是如果您收到这个连接/断开连接/连接的序列,请检查协议字符串。这可能与身份验证失败有关。

好吧,现在看来一切正常。我现在只收到一次accessoryDidConnect/accessoryDidDisconnect消息,这很好。但是,它似乎与registerforLocalNotification的调用顺序无关。但是,我所找到的所有文档都按照您在这里的顺序调用register。我似乎做得有点倒退。我认为真正的问题可能是在我对附属对象的引用计数中。最近这方面的代码有很多变化,但不是我做的。我和做这些的开发人员谈过,他不知道为什么这些通知现在只收到一次。作为旁注,我们的引用计数是关闭的,因为我们没有意识到线程增加了线程运行的目标的引用计数。无论如何,我会将此标记为答案,尽管我不能100%确定为什么这会突然起作用。因为EAAccessoryManager是包装器对象,它将处理previos注册。因此,在包装所有通知之前,你应该首先指定我需要获得这些通知,这对我不起作用,它从不调用EAAccessoryDidConnectNotification方法,甚至连设备都已连接,所以更改NSNotificationCenter观察员的顺序和注册EAAccessoryNotification没有帮助?正如我上面所说的,我不知道为什么突然间这开始正常工作。我将再次检查connect是否只启动一次(正在开发一个新的应用程序,该应用程序还连接到另一个附件)。我记得这个问题以前让我发疯。对-改变代码顺序没有什么区别。我还尝试在应用程序委托中而不是在我的rootviewController中设置通知(只是因为这是一种尝试)。然后我尝试了苹果的演示,得到了相同的连接/断开连接/连接行为。这不是我的相机接口-我也有一个midi移动设备,并得到相同的结果。唯一剩下的(我能想到的)是,我的iPad接口是道奇的——或者我的libusb上有道奇的东西。我也在和Kinect/OpenNI一起工作——也许我在系统方面搞砸了什么。你有没有想过?如果没有,也许这个问题应该重新打开。不,还没有整理好它+还没有升级到iOS 5来测试它是否仍然是一个问题。当我尝试更改顺序(如上所述)时,没有任何区别。iOS5对这种情况没有帮助。连接时仍会发送两个通知。