2017-09-15 3 views
1

Je travaille actuellement sur le pontage de certaines fonctions HomeKit vers React Native. Je dois être capable de convertir mon tableau de HMHome objets pour être interprétable à Réact Native. Je suppose que je vais devoir utiliser RCTConvert, mais je suis un peu énervé.Comment convertir HMHome en javascript pour React Native?

Je m'abonne à un événement où les HMHome s de l'utilisateur sont prêts à être retournés comme indiqué ci-dessous dans HomeKitPage.js.

this.subscription = RNHomeKitEmitter.addListener(
     'homesReady', 
     (homes) => console.log(homes) 
    ); 

Mon RNHomeKit.m émet l'événement homesReady et retourne la liste des maisons comme on le voit ci-dessous.

- (void)homeManagerDidUpdateHomes:(HMHomeManager *)myHomeManager { 
    RCTLog(@"HOMEMANAGERDIDUPDATEHOMES"); 
    RCTLog(@"PRIMARY HOME: %@", self.myHomeManager.primaryHome); 
    RCTLog(@"MY LIST OF HOMES: %@", self.myHomeManager.homes); 

    [self sendEventWithName:@"homesReady" body:@{@"homes": self.myHomeManager.homes}]; 
} 

La sortie pour Ma liste de maisons de RCTLog est:

MY LIST OF HOMES: (
    "[ name = Matt's Awesome Home, primary : Yes ]" 
) 

donc ma sortie vu par la console JavaScript à partir du EventEmitter est un tableau où l'indice est le nombre de maisons de l'utilisateur, et chaque objet est null (comme prévu).

Comment puis-je convertir ceci en un tableau d'objets JSON utilisables par mon JavaScript?

Répondre

0

Cela ne peut pas être le moyen idéal de le faire, mais il fonctionne:

RNHomeKit.m

for (HMHome *home in self.myHomeManager.homes) { 
    NSDictionary *homeObject = @{ 
        @"name": home.name, 
        @"isPrimary": [NSNumber numberWithBool:home.primary] 
        }; 
    [homesArray addObject: homeObject]; 
    }; 

    RCTLog(@"DA HOMES ARRAY: %@", homesArray); 
    [self sendEventWithName:@"homesReady" body:@{@"homes": homesArray}]; 

HomeKitPage.js

RNHomeKit.createHome(); 
    this.subscription = RNHomeKitEmitter.addListener(
     'homesReady', 
     (response) => this.setState({ homes: response.homes }) 
    ); 
    }