Bonjour IP Adresse aus Array<Data>

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Bonjour IP Adresse aus Array<Data>

    Hi.

    ich spiele gerade mit Bonjour rum und möchte gerne von HomeKit Devices die IP Adresse aus Bonjour ziehen. Ich bekomme auch schon Array welches so aussieht:

    Quellcode

    1. ▿ Optional<Array<Data>>
    2. ▿ some : 2 elements
    3. ▿ 0 : 16 bytes
    4. - count : 16
    5. ▿ pointer : 0x0000600001875200
    6. - pointerValue : 105553141912064
    7. ▿ bytes : 16 elements
    8. - 0 : 16
    9. - 1 : 2
    10. - 2 : 2
    11. - 3 : 3
    12. - 4 : 192
    13. - 5 : 168
    14. - 6 : 9
    15. - 7 : 214
    16. - 8 : 0
    17. - 9 : 0
    18. - 10 : 0
    19. - 11 : 0
    20. - 12 : 0
    21. - 13 : 0
    22. - 14 : 0
    23. - 15 : 0
    24. ▿ 1 : 28 bytes
    25. - count : 28
    26. ▿ pointer : 0x0000600001f4c8d0
    27. - pointerValue : 105553149085904
    28. ▿ bytes : 28 elements
    29. - 0 : 28
    30. - 1 : 30
    31. - 2 : 2
    32. - 3 : 3
    33. - 4 : 0
    34. - 5 : 0
    35. - 6 : 0
    36. - 7 : 0
    37. - 8 : 254
    38. - 9 : 128
    39. - 10 : 0
    40. - 11 : 0
    41. - 12 : 0
    42. - 13 : 0
    43. - 14 : 0
    44. - 15 : 0
    45. - 16 : 2
    46. - 17 : 38
    47. - 18 : 115
    48. - 19 : 255
    49. - 20 : 254
    50. - 21 : 132
    51. - 22 : 3
    52. - 23 : 207
    53. - 24 : 4
    54. - 25 : 0
    55. - 26 : 0
    56. - 27 : 0
    Alles anzeigen
    So wie ich das sehe, bräuchte ich aus dem 0ten Element die Bytes 4,5,6 und 7.

    Aber wie komme ich da ran? Ich Bitte um Hilfe. Danke

    Gruß

    Dirk
  • Das erste NSArray-Objekt kannst Du ja per firstObject bekommen und in einem NSData-Objekt speichern. Dann hole Dir einfach die jeweiligen Bytes und speichere sie in einem int8 ... das nachfolgende Objective-C-Snippet sollte Dir helfen:

    Quellcode

    1. int8 tempBuffer8;
    2. [data getBytes:&tempBuffer8 range:NSMakeRange(4, 1)];
    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Hey, danke alle. Aber es war doch einfacher als gedacht. Warum auch immer es bei den ersten Versuchen nicht klappte kann ich nicht sagen, aber ein einfaches: service.addresses![0][4] liefert mit den gewünschten wert.

    Aber ich habe gleich noch eine Frage. Ich benutze eine UISplitview. In der Masterview ist eine Tableview mit den Geräten die aus Bonjour erhalten habe und in der Detailview soll dann eine WKWebView die Seite von dem Gerät öffnen.

    In der Masterview mache ich folgendes:

    Quellcode

    1. override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    2. let ctrl:DetailViewController = DetailViewController()
    3. ctrl.ipadress = discoveredDevices[indexPath.row].ipadress
    4. ctrl.hostname = discoveredDevices[indexPath.row].hostname
    5. ctrl.loadSite()
    6. }
    Ich übergebe IPAdresse und Hostname an den Detailview und rufen dann die Methode auf die dem Webview sagt, das dieser laden soll:


    Quellcode

    1. import UIKit
    2. import WebKit
    3. class DetailViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {
    4. var ipadress:String = ""
    5. var hostname:String = ""
    6. @IBOutlet var webview: WKWebView!
    7. override func viewDidLoad() {
    8. super.viewDidLoad()
    9. webview.uiDelegate = self
    10. webview.navigationDelegate = self
    11. }
    12. func loadSite() {
    13. if let url = URL(string: "http://\(ipadress)") {
    14. webview?.load(URLRequest(url: url))
    15. }
    16. }
    17. }
    Alles anzeigen


    Leider ist webview immer nil.

    Was mache ich denn hier falsch?

    Danke und Gruß

    Dirk
  • Michael schrieb:

    Hast du mal geschaut, was "http://\(ipadress)" ergibt? Ich denke, dass da was anderes raus kommt, als du denkst.
    es kommt genau raus was raus kommen soll. \(ipadress) wird zu einer gültigen IP Adresse!



    MyMattes schrieb:

    Ganz dumm gefragt: Aber Du hast im IB eine WKWebView hinzugefügt und mit dem Outlet verknüpft?

    Mattes
    ja, ich habe im IB ein WKWebview und ein IBOutlet in der Detailview Klasse.
  • Qvex23 schrieb:

    es kommt genau raus was raus kommen soll. \(ipadress) wird zu einer gültigen IP Adresse!
    Ok, ich dachte in ipadress steht einfach nur das Ergebnis von service.addresses![0][4]

    Nächster Versuch: bist du dir sicher, dass die Geräte auch http sprechen? Zumindest das Gerät, von dem die Daten im ersten Beitrag sind, lauscht auf Port 515, nicht Port 80.
    Was zeigt denn zum Beispiel Safari an, wenn du da mal die URL aufrufst?
  • Michael schrieb:

    Qvex23 schrieb:

    es kommt genau raus was raus kommen soll. \(ipadress) wird zu einer gültigen IP Adresse!
    Ok, ich dachte in ipadress steht einfach nur das Ergebnis von service.addresses![0][4]
    Nächster Versuch: bist du dir sicher, dass die Geräte auch http sprechen? Zumindest das Gerät, von dem die Daten im ersten Beitrag sind, lauscht auf Port 515, nicht Port 80.
    Was zeigt denn zum Beispiel Safari an, wenn du da mal die URL aufrufst?
    Ja, 100% sicher!

    MyMattes schrieb:

    Qvex23 schrieb:

    ja, ich habe im IB ein WKWebview und ein IBOutlet in der Detailview Klasse.
    ... und die zwei sind auch verknüpft?
    Sorry für's Nachfragen, aber manchmal sind es die einfachen Dinge :)

    Mattes
    ja, ist verknüpft, sieht man glaube ich auch um Detailviewcontroler den ich oben gepostet habe
  • Qvex23 schrieb:

    ja, ist verknüpft, sieht man glaube ich auch um Detailviewcontroler den ich oben gepostet habe
    Oh ja, jetzt sehe ich's. Du magst das Outlet im IB mit dem WKWebView verknüpft haben, aber das ist irrelevant. Denn in deiner Methode tableView(_:, didSelectRowAt:) erstellst du direkt eine neue DetailViewController Instanz, anstatt die neue Instanz aus dem Storyboard heraus zu instanzieren. Da nützt dir die Verknüpfung im Storyboard dann natürlich gar nichts.
  • Qvex23 schrieb:

    Ein Segue brauche ich beim Splitview nicht, da die Detailview ja IMMER angezeigt wird.
    Dann reden wir von unterschiedlichen Arten von "SplitViews" ... In meinen Apps zeigen UISplitViews auch gerne einmal nur die MasterView und wechseln dann per Segue in die DetailView: Nämlich im compact mode z. B. grundsätzlich auf iPhones oder auf iPads in der Slide-Over-View.

    Aber wenn Deine App nur auf iPads und nie im Multitasking läuft, kannst Du sicher anders agieren. Dann müsstest Du aber ja leicht eine Referenz auf den DetailViewController haben und könntest dort eine Methode aufrufen.

    Ich verstehe allerdings nicht, warum man das tun sollte ... statt sich an der Standardarchitektur von Apple zu orientieren.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Also die App soll schon auf iPhone und iPad laufen. Allerdings hatte ich einige Probleme mit Segues, die dann dazu führten, das in der Masterview eine Detailview angezeigt wird und das man auf dem Weg zurück dann in der aufgerufenen Webseite über einen leeren Screen erst wieder in die Masterview kam und die eigentlich Detailview nie etwas darstellte. Gibts denn man ein gutes Tutorial für Splitviews? Aber bitte jetzt nicht die Apple Dokumentation Posten, die hilft mir normalerweise gar nichts!
  • Ich fand es am hilfreichsten, ein Beispiel-Projekt auf Basis des Apple-Templates aufzusetzen und nachzuvollziehen. Besonderes Augenmerk würde ich dabei auf die View-Hierarchie in den unterschiedlichen Zuständen legen ... einfach Breakpoints setzen und in der Konsole die viewController (und deren Subs) der SplitView betrachten.

    Etwas Tüftelei ist das Zusammenspiel des preferred displayMode mit der zugehörigen Delegate-Methode "collapseSecondary..." und Button.

    Die Apple-Doku fand ich gar nicht so schlecht, aber sie geht nicht ausreichend in die o. g. Details ... wobei ich mich immer nur auf die klassische SplitView beziehen kann, nicht die neue spaltenorientierte. Tutorials findest Du reichlich, solange Dir der einfache Aufbau reicht - und dann braucht man sie m. E. nicht. Komplexere Szenarien erfordern wie immer eigenes Forschen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Qvex23 schrieb:

    Also die App soll schon auf iPhone und iPad laufen. Allerdings hatte ich einige Probleme mit Segues, die dann dazu führten, das in der Masterview eine Detailview angezeigt wird und das man auf dem Weg zurück dann in der aufgerufenen Webseite über einen leeren Screen erst wieder in die Masterview kam und die eigentlich Detailview nie etwas darstellte. Gibts denn man ein gutes Tutorial für Splitviews? Aber bitte jetzt nicht die Apple Dokumentation Posten, die hilft mir normalerweise gar nichts!
    Ich fand den Kurs CS193p von Stanford ganz gut. Habe den noch unter iTunes U gesehen,
    die neuen gibt es nun aber wohl nur auf YouTube. Dort wurde auch immer ganz schön gezeigt,
    wie man das UI in verschiedenen Situationen zum Laufen bringt, insbesondere SplitView sowohl
    auf iPad als auch iPhone.