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 に答える