2017-05-31 2 views
0

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: enter image description here

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:

enter image description here

enter image description here 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!!

+0

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

+0

@ 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. –

+0

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

Répondre

0

Correction par moi-même !!!!!!!!!!!

J'ai fait une erreur ici. Dans la fonction - (void)viewWillDisappear:(BOOL)animated

Je ne devrais pas inclure [self.browser stopSearchingForNewAccessories], sinon tout le processus de découverte sera arrêté si je quitte la page currentRoom. Donc, la version correcte est

- (void)viewWillDisappear:(BOOL)animated{ 
    [super viewWillDisappear:YES]; 
    self.navigationController.navigationBar.hidden = YES; 
} 

Stupide moi mais aussi génie !!!!! :)

0

Sur le simulateur iPhone, allez dans Paramètres-> Confidentialité-> HomeKit et sélectionnez «Réinitialiser la configuration HomeKit».

Si cela ne fonctionne pas, supprimez Xcode et réinstallez-le à partir de l'App Store.

+0

J'ai essayé ce que vous avez dit, supprimé Xcode et réinstallé. Rien n'a changé ..... Et pas d'option "Reset Homekit Configuration" dans la page Homekit ....... –