J'apprends à développer HomeKit App. J'essayais d'ajouter un accessoire à la maison/pièce. Quand je cours le projet, il est capable de découvrir les accessoires mais pas capable de l'ajouter à une maison ou assigner une pièce à l'accessoire.HomkeKit dev: La page "Enter setup code" apparaît seulement une demi-seconde et passe à la page "Impossible d'ajouter DeviceName, Home ne peut pas se connecter à cet accessoire"
Selon le tutoriel, le projet découvre les accessoires comme ci-dessous:
Quand j'ajoute l'accessoire à la maison/chambre, le « Entrez le code de configuration » apparaît seulement pour une demi-seconde puis il se tourne vers "Impossible d'ajouter XXX, Home ne peut pas se connecter cet accessoire" intermediatly, comme indiqué ci-dessous:
Le code partiel je ajouter l'accessoire à la pièce/home est indiqué ci-dessous:
currentRoomVC.h
#import <UIKit/UIKit.h>
#import "MyHomeKit.h"
@interface currentRoomVC : UIViewController<UIScrollViewDelegate,UITableViewDelegate,UITableViewDataSource,HMAccessoryBrowserDelegate>
@property (nonatomic,strong)HMRoom *currentRoom;
@property (nonatomic,strong)HMRoom *currentHome;
@property(nonatomic,strong) NSMutableArray *accArry;
@property(weak,nonatomic) IBOutlet UIScrollView *scroView;
@property(strong,nonatomic) IBOutlet UITableView *accTable;
@property(nonatomic,strong) HMAccessoryBrowser *browser;
@end
currentRoomVC.m
#import "currentRoomVC.h"
@interface currentRoomVC()
@end
@implementation currentRoomVC
- (void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:YES];
self.navigationController.navigationBar.hidden = NO;
}
- (void)viewWillDisappear:(BOOL)animated{
[super viewWillDisappear:YES];
self.navigationController.navigationBar.hidden = YES;
[self.browser stopSearchingForNewAccessories];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor yellowColor];
self.navigationItem.title = self.currentRoom.name;
self.accArry = [[NSMutableArray alloc] init];
self.browser = [[HMAccessoryBrowser alloc]init];
self.browser.delegate = self;
[self configSearchBtn];
[self cofigureTableview];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark -
#pragma mark accessoryBrowser
- (void) configSearchBtn{
UIButton *addProject = [UIButton buttonWithType: UIButtonTypeRoundedRect];
addProject.frame = CGRectMake(self.view.bounds.size.width/2-50, self.view.bounds.size.height/4-10, 100, 40);
[addProject setTitle:@"Add device" forState:UIControlStateNormal];
[addProject addTarget:self action:@selector(searchDevice:) forControlEvents:UIControlEventTouchUpInside];
addProject.backgroundColor = [UIColor redColor];
[self.view addSubview:addProject];
}
- (void)searchDevice:(UIButton*) button
{
NSLog(@"Start searching new devices...");
[self.browser startSearchingForNewAccessories];
}
- (void) accessoryBrowser:(HMAccessoryBrowser *)browser didFindNewAccessory:(HMAccessory *)accessory{
NSLog(@"Found a new device: %@", accessory.name);
[_accArry addObject:accessory];
NSLog(@"%lu", (unsigned long)_accArry.count);
[self.accTable reloadData];
}
- (void) accessoryBrowser:(HMAccessoryBrowser *)browser didRemoveNewAccessory:(nonnull HMAccessory *)accessory{
NSLog(@"Remove deveice %@", accessory.name);
}
#pragma mark -
#pragma mark tableview
-(void)cofigureTableview
{
self.accTable = [[UITableView alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height/2,self.view.bounds.size.width,self.view.bounds.size.height/2) style:UITableViewStylePlain];
self.accTable.delegate = self;
self.accTable.dataSource = self;
[self.view addSubview:self.accTable];
}
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return _accArry.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"cellIdentifier";
UITableViewCell *cell = [self.accTable dequeueReusableCellWithIdentifier:cellIdentifier];
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
HMAccessory *acc = _accArry[indexPath.row];
cell.textLabel.text = acc.name;
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
{
NSLog(@"title of cell %@", [self.accArry objectAtIndex:indexPath.row]);
NSLog(@"current room: %@", self.currentRoom.name);
NSLog(@"current home: %@", self.currentHome.name);
HMAccessory *acc = _accArry[indexPath.row];
__block HMHome *home = self.currentHome;
__block HMRoom *room = self.currentRoom;
[home addAccessory:acc completionHandler:^(NSError * _Nullable error) {
if (error)
{
// Failed to add accessory to home
NSLog(@"Fail to add device to home %@",error.localizedDescription);
}
else
{
if (acc.room != room) {
// 3. If successfully, add the accessory to the room
[home assignAccessory:acc toRoom:room completionHandler:^(NSError * _Nullable error) {
if (error) {
// Failed to add accessory to room
NSLog(@"Fail to assign room to room");
}
else{
NSLog(@"Add this device to %@", room.name);
}
}];
}
}
} ];
}
Comme vous pouvez le voir la fonction didSelectRowAtIndexPath
essayer d'attraper les deux erreurs et error.localizedDescription
affiche seulement Failed to add the accessory
Pourquoi je n'arrive pas à me connecter aux accessoires? Où j'ai mal fait? Merci!!
Veuillez nous montrer le fichier complet. Il pourrait y avoir quelque chose que d'autres développeurs ont besoin de voir pour vous aider. Aussi, qu'avez-vous fait pour résoudre votre problème? – moonman239
@ moonman239 Merci de me le rappeler. J'ai inclus toute la classe que je traite avec les accessoires. Je n'ai pas fait de dépannage parce que je ne sais pas où je peux commencer à dépanner ceci ...... Comme je l'ai mis à jour dans la question, je supprime deux conditions de «rattrapage d'erreur» et laisse montrer un message d'erreur. –
Je pense que je vois d'où tu viens. L'accessoire est là, sinon Home ne saurait pas à quoi vous essayez de vous connecter. – moonman239