2011-07-29 152 views
7

我有一個班級管理來自和去iPad的外部附件的消息。在init我有以下代碼:EAAccessoryDidConnectNotification爲什麼會發生兩次?

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

我想不通,爲什麼我會得到一個額外的連接和斷開。有任何想法嗎?

回答

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 
+0

更新,並檢查了這一點 –

+0

好了,事情似乎現在工作正常。我現在只收到一次accessoryDidConnect/accessoryDidDisconnect消息,這很好。但是,它似乎與調用registerForLocalNotifications的順序無關。但是,我發現的所有文檔都是按照您在此處訂購的順序進行註冊。我似乎稍微做了一些倒退。我認爲真正的問題可能在EAAccessory對象的引用計數中。最近這段代碼有很多代碼更改,但它們不是我自己的。我與開發者交流了他們,並且... – Sam

+0

他不確定爲什麼這些通知現在只能進入一次。作爲一個方面說明,我們的引用計數是關閉的,因爲我們沒有意識到線程增加了線程運行目標的引用計數。無論如何,我會將此標記爲答案,即使我不能100%確定爲何突然出現這種情況。 – Sam

2

沒有答案,但我不能發表評論。我使用上面的答案中提供的代碼也看到了這個雙重通知。我也在Apple提供的EADemo示例代碼中看到它。

+0

所以更改訂單NSNotificationCenter觀察員註冊EAAcessoryNotification沒有幫助?正如我上面所說,我不確定爲什麼突然這開始正常工作。我會仔細檢查一次連接火災的情況(正在開發一個新的應用程序,該應用程序還連接到不同的附件)。我記得之前這個問題讓我瘋狂。 – Sam

+0

+1參與關於此的討論 – Sam

+0

正確 - 更改代碼順序沒有什麼區別。我也嘗試在應用程序委託中設置通知,而不是我的rootviewController(僅僅因爲它是可以嘗試的)。然後,我嘗試了Apple的演示,並獲得了相同的連接/斷開/連接行爲。這不是我有的相機連接器 - 我也有一個midi mobilizer設備,並得到相同的結果。剩下的唯一一件事(我能想到的)是我的iPad連接器非常黑暗 - 或者我的libusb上有些東西在閃爍。我也在與Kinect/OpenNI合作 - 也許我把系統搞砸了。 –

5

的eaaccessory框架將永遠火2連接,並從某些原因2個斷開通知。第一個連接斷開對將沒有協議字符串,您可以忽略這些字符串。

0

答案是EAAccessoryDidConnectNotification

在一些情況下的文檔上,前認證已完成,導致空protocolStrings陣列和隨後的斷開消息的連接通知可以被髮送。如果發生這種情況,稍後會在身份驗證成功時發送另一條連接消息。

絕對不應該一直髮生,但如果您收到此連接/斷開/連接序列,請檢查協議字符串。這可能與認證失敗有關。