В настоящее время я работаю над подключением некоторых функций HomeKit к React Native. Мне нужно, чтобы мой массив объектов HMHome
мог быть интерпретирован для React Native. Я предполагаю, что мне нужно использовать RCTConvert
, но я немного взволнован.
Я подписываюсь на событие, в котором пользователь HMHome
готов к возврату, как показано ниже в HomeKitPage.js
.
this.subscription = RNHomeKitEmitter.addListener(
'homesReady',
(homes) => console.log(homes)
);
Мой RNHomeKit.m
испускает событие homesReady
и возвращает список домов, как показано ниже.
- (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}];
}
Выход для моего списка домов из RCTLog:
MY LIST OF HOMES: (
"[ name = Matt Awesome Home, primary : Yes ]"
)
Таким образом, мой вывод, увиденный консолью JavaScript из EventEmitter, представляет собой массив, в котором индексом является число пользователей, и каждый объект имеет null
(как и ожидалось).
Как я могу преобразовать это в массив объектов JSON, которые можно использовать для моего JavaScript?
Это не может быть идеальным способом сделать это, но он работает:
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}];
RNHomeKit.createHome();
this.subscription = RNHomeKitEmitter.addListener(
'homesReady',
(response) => this.setState({ homes: response.homes })
);
}