2

編集:次のエラーコードが表示されます:

アクセサリの追加エラー 操作を完了できませんでした。(HMErrorDomain エラー 2)

と:

アクセサリの追加エラー アクセサリとのペアリングを開始できませんでした [名前 = xxxxx、提供された名前 = xxxxx、uuid = xxxxx-xxxxx-xxxxx-xxxxx-xxxxx、識別子 = xxxxx、構成アプリ ID = (null)、ホーム = (null) 、ブリッジ = (ヌル) ]

どちらも2番です。

が理解していないのは、HMCatalog アプリでこれが機能する理由です。コードの何が問題になっていますか? アクセサリ シミュレータでは問題なく動作しますが、実際のアクセサリでは機能しません(実際のアクセサリは HMCatalog アプリを介してのみ追加され、カスタム アプリでは追加されません)。


実際の動作:

  • アプリからアクセサリを追加する (初めて機能する)
  • アクセサリをリセットしてから再度追加します (下のスクリーンショットでは機能せず、ペアリング エラーが表示されます)。ただし、Apple の例であるHMCatalogを使用すると、これらのエラーが発生しても機能します。

ここに画像の説明を入力

そして時折:

ここに画像の説明を入力

予想された結果:

  • ペアリングエラーなしで私のアプリからもアクセサリーを追加します

これは私のアクセサリーコードです

 [self.home addAccessory:self.accessory completionHandler:^(NSError *error) {
        NSLog(@"in adding for accessory %@", self.accessory.name);
        if (error) {
            NSLog(@"Error adding accessory %@ %li", error.localizedDescription, (long)error.code);

            UIAlertController *alertController = [UIAlertController
                                                  alertControllerWithTitle:@"Pairing error"
                                                  message:error.localizedDescription
                                                  preferredStyle:UIAlertControllerStyleAlert];

            UIAlertAction *okAction = [UIAlertAction
                                       actionWithTitle:NSLocalizedString(@"OK", @"OK action")
                                       style:UIAlertActionStyleDefault
                                       handler:^(UIAlertAction *action)
                                       {
                                           NSLog(@"OK action");
                                       }];

            [alertController addAction:okAction];
            [self presentViewController:alertController animated:YES completion:nil];

        }
        else{
            // TODO: Tweak this
            NSLog(@"Added to home");

            [self dismiss:nil];
            /**
             [homeSweetHome assignAccessory:accessory toRoom:nil completionHandler:^(NSError *error) {
             if (error) {
             NSLog(@"Failed adding accessory %@ to room %@", accessory.name, room.name);
             }
             }];**/
        }
    }];
4

2 に答える 2

2

編集: 上記の Tushar Koul のコメントによると、ブラウザーのdiscoveredAccessories配列を無視し、代わりにaccessoryBrowserDelegate (-accessoryBrowser:didFindNewAccessory および -accessoryBrowser:didRemoveAccessory) から独自のオブジェクト配列を構築する必要があるようです。

ブラウザーに検索を開始するように指示した後、現在利用可能なすべてのアクセサリがこれらのメソッドに渡されます。

HMErrorCode 2 が見つかりません ( apple docsを参照)。これは、お持ちのアクセサリ ポインタが無効になったことを意味します。これは、アクセサリ オブジェクトを取得してから、アクセサリ ブラウザにアクセサリの検索を開始するように指示したことが原因である可能性があります。アクセサリを追加する前にブラウザの割り当てが解除された場合にも発生する可能性があります。

アクセサリを家に追加する前に、HMAccessoryBrowser 用の新しい HMAccessory を取得していることを確認してください。追加している HMAccessory がどこから来ているかを示すコードをもっと共有できれば、もっと役立つかもしれません。

于 2015-08-25T22:45:01.720 に答える
2

5つの異なる組み合わせと数時間のテストの後、これが私の発見です -

  1. HMAccessoryBrowser のインスタンス化は、ホームキット デバイスの検索を開始する前に行う必要があります。

これをviewDidLoadに連続した行で入れましたが、100%の確率で機能しませんでした

  self.accessoryBrowser = [HMAccessoryBrowser alloc] init]; 
[self.accessoryBrowser startSearchingForNewAccessories];

たとえば、View Controllerで使用する場合、そのView Controllerコードは次のようになります-

    -(instanceType)init{  
if(self = [super init]){   
self.accessoryBrowser = [HMAccessoryBrowser alloc] init];  } 
}

    -(void)viewDidLoad{ 
[self.accessoryBrowser startSearching];
 }

したがって、前に初期化する必要があると思いますHMAccessoryBrowser

  1. HMAccessoryBrowser のインスタンスは、ホームへのアクセサリの追加が完了するまで有効です。

  2. stopSearchingForNewAccessoriesホームへのアクセサリの追加が完了するまで、電話をかけないでください。

だから#2と#3について話してください

  • を呼び出した後にデバイスを見つけstartSearchingForNewAccessories、それを呼び出します[self.home addAccessory: completion:]

この操作が正常に完了するまでstopSearchingForNewAccessories、HMAcccessoryBrowser のインスタンスを呼び出して保持しないでください。

ホームキットのアクセサリーを探していましたが、見つけたら探すのをやめて、家にアクセサリーを追加しようとしました。ほとんど毎回 ErrorCode 2 を取得します。電話をやめたらstopSearching、より良い結果が見られました

  1. discoveredAccessories配列からのオブジェクト参照を使用することに疑問があります。代わりに、デリゲート コールバックから受け取ったオブジェクトを使用することをお勧めします。

- (void)accessoryBrowser:(HMAccessoryBrowser *)browser didFindNewAccessory:(HMAccessory *)accessory

于 2015-10-22T20:31:49.747 に答える