2017-10-02 40 views
0

Pour commencer, voici mon code:NativeScript: Obtenir chaîne de interop.reference

var buffer = malloc(interop.sizeof(interop.types.UTF8CString)); 
var fillBuffer = mac.getBytes(buffer); 
var bytes = new interop.Reference(interop.types.UTF8CString, buffer); 
var hexMac = bytes[0]; 

La variable 'Mac' est un extrait de NSData ont objecté CoreBluetooth. C'est la réponse de balayage d'un périphérique BLE, qui contient l'adresse MAC du périphérique (00: 0b: 57: a2: fb: a0).

Ce problème est lié à THIS question que j'avais posté plus tôt.

La solution fournie est excellente; cependant, je ne peux pas sembler l'implémenter dans nativescript:

(instancetype) stringWithFormat: format (NSString *), ...; Intellisense indique que la méthode n'existe pas sur le type NSString.

En raison de ce problème, j'ai décidé d'aller un autre itinéraire (comme vous pouvez le dire). Je remplis un tampon avec les octets de l'adresse MAC. Dans le code ci-dessus, octets [0] équivaut à 0xb57a2fba0.

J'essaie maintenant de convertir cela (qui est un interop.Reference) en une chaîne que je peux stocker sur le back-end (de préférence au format xx: xx: xx: xx: xx).

J'ai été à tout ce week-end, et n'arrive pas à trouver une solution. J'ai même cassé obj.d! Foundation.d.ts pour savoir si stringWithFormat était supporté, en vain.

La communauté nativescript a été incapable de fournir une résolution.

S'il vous plaît aider si vous le pouvez!

Répondre

1

Je ne sais pas quoi que ce soit au sujet NativeScript du tout, mais étant donné l'autre code que vous avez écrit, je suppose que vous appelez +alloc d'abord, et ainsi dire d'utiliser -initWithFormat: (une méthode d'instance initialisant) plutôt que +stringWithFormat: (un méthode de classe qui gère l'allocation et l'initialisation).

+0

Malheureusement, cela produit le même résultat: "Propriété 'initWithFormat' n'existe pas sur le type 'NSString'. J'ai essayé après + alloc et essayé + stringWithFormat. Sans Ce qui me frustre est que votre réponse est d'or, la question qui apparaît comme une limitation de NativeScript J'ai ouvert un problème ici. Https://github.com/NativeScript/NativeScript/issues/4910 Merci beaucoup pour votre aide Rob J'ai essayé de convaincre mon employeur de passer au code natif pour ce projet, mais il ne semble pas que nous puissions le faire. – AzraelPwnz

+0

'... withFormat:' est une méthode vararg, donc il est possible que ceux-ci ne soient pas importés? Mais si c'est JavaScript (?) alors vous pouvez toujours juste convertir là, non? 'bytes.toString (16) 'et le pad avec un zéro de premier plan si moins de 16? Je suppose qu'il existe un moyen de convertir les chaînes JavaScript b Ack à NSString si vous en avez besoin? (Je devine, encore une fois, je ne sais rien à propos de NativeScript). Bonne chance. –

+1

Votre commentaire a conduit à une solution possible. C'est un peu brouillon, mais ça marche: var hexMac = octets [0] .toString(). Replace (/ [& \/\\ #, +() $ ~%. '"<> {}]/g, '') .split (":") [1]; ' – AzraelPwnz