2017-10-02 4 views
0

zu starten, hier ist mein Code:NativeScript: der String von 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]; 

Die Variable 'Mac' ist ein NSData widersprochen von CoreBluetooth abgerufen. Es ist die Scan-Antwort von einem BLE-Gerät, die die MAC-Adresse des Peripheriegeräts enthält (00: 0b: 57: a2: fb: a0).

Dieses Problem ist mit THIS Frage verbunden, die ich früher gepostet hatte.

Die angebotene Lösung ist großartig; aber ich kann nicht scheinen, dies in nativescript zu implementieren:

(instantype) stringWithFormat: (NSString *) format, ...;

Intellisense sagt mir, die Methode existiert nicht auf Typ NSString.

Aufgrund dieses Problems entschied ich mich, eine andere Route zu gehen (wie Sie sehen können). Ich fülle einen Puffer mit den Bytes der MAC-Adresse. Im obigen Code entsprechen Bytes [0] 0xb57a2fba0.

Ich versuche nun, das (was eine Interop.Reference ist) in eine Zeichenfolge, die ich auf dem Back-End (vorzugsweise im Format xx: xx: xx: xx: xx) speichern kann, zu konvertieren.

Ich war das ganze Wochenende, und kann nicht scheinen, eine Lösung zu finden. Ich habe sogar objc! Foundation.d.ts aufgebrochen, um herauszufinden, ob stringWithFormat unterstützt wurde, ohne Erfolg.

Die Eingeborenenschrift Community Slack war ebenfalls nicht in der Lage, eine Lösung zu liefern.

Bitte helfen Sie, wenn Sie können!

Antwort

1

ich etwas über NativeScript gar nicht wissen, aber die anderen Code gegeben Sie geschrieben, ich nehme an, Sie rufen +alloc erste, und so bedeuten -initWithFormat: (eine Instanz-Methode, die initialisiert) zu verwenden, anstatt +stringWithFormat: (a Klassenmethode, die Zuweisung und Initialisierung behandelt).

+0

Leider erzeugt das das gleiche Ergebnis: "Property 'initWithFormat' existiert nicht für den Typ 'NSString.' Ich habe versucht, dies nach + alloc und + string versucht. Ohne Was mich frustriert ist, dass Ihre Antwort ist golden, mit der Frage eine Beschränkung von NativeScript sein erscheinen ich hier ein Problem aufgetan. Https://github.com/NativeScript/NativeScript/issues/4910 Vielen Dank für Ihre Hilfe Rob. Ich habe versucht, meinen Arbeitgeber auf native Code für dieses Projekt zu wechseln, aber es sieht nicht so aus, als ob wir können bis Anfang nächsten Monats. – AzraelPwnz

+0

'... withFormat:' ist eine Vararg-Methode, also ist es möglich, dass diese nicht importieren? Aber wenn das ist JavaScript (?) dann können Sie immer nur dort konvertieren, richtig? 'bytes.toString (16) 'und pad es mit einer führenden Null, wenn weniger als 16? Ich nehme an, es gibt eine Möglichkeit, JavaScript-Strings zu konvertieren b Ack zu NSString, wenn Sie das brauchen? (Ich schätze mal wieder, ich weiß nichts über NativeScript). Viel Glück. –

+1

Ihr Kommentar führte zu einer möglichen Lösung. Es ist ein bisschen chaotisch, aber es funktioniert .: var hexMac = bytes [0] .toString(). Ersetzen (/ [& \/\\ #, +() $ ~%. '"<> {}]/g, '') .split (":") [1]; ' – AzraelPwnz

Verwandte Themen