MQTT / Moscapsule / Swift:如何将消息发布到主题时,如何将数据从主题传递到标签并自动更新

时间:2017-09-29 18:08:56

标签: ios swift xcode mqtt mosquitto

好的,首先,我是swift / xcode的新手。这是我对stackoverflow的第一个问题。希望有人可以帮助我,这对其他人可能有用。

我正在写一个小的iphone应用程序来连接我的MQTT代理(Mosquitto,运行在raspbian上,然后与其他一些arduinos /设备进行通信。这并不重要)

该应用程序有一个按钮,用于向主题发布消息,以及一个标签,(应该!)显示发布到该主题的最后一条消息或任何主题。一旦消息从代理进入。

我已经让应用程序订阅主题并发布到主题。我甚至可以使用按钮功能将标签文本重置为该主题上发布的最后一条消息。

我想要做的是每次将消息发布到指定主题时都要更新标签文本。

我尝试将行self.viewer.text = String(L)从按钮功能下移到mqttConfig.onMessageCallback内部,以为每次调用onMessageCallback函数时都会重置标签文本。这对我来说似乎合乎逻辑,但不起作用。我想我可能在这里遗漏了一些概念。

包含的是代码。

注意:有一个我可能不需要的变量L,我用它来尝试将数据传入和传出函数。

注意2:我上面描述的方法,即没有工作,是将第75行移到第52行,就在下面。 L = receivedMessage

注3:Xcode 9,Swift 3.2

        //
    //  ViewController.swift
    //  092817app2
    //
    //  Created by ---- on 9/28/17.
    //  Copyright © 2017 ---. All rights reserved.
    //

    import UIKit
    import Moscapsule


    let msg = "11111"
    let topic = "topic"
    var L = "0"





    class ViewController: UIViewController {


        //set MQTT client configuration
        let mqttConfig = MQTTConfig(clientId: "aaa", host: "192.168.0.19", port: 1883, keepAlive: 60)

        // create new MQTT Connection
        var mqttClient: MQTTClient? = nil



    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        mqttConfig.onPublishCallback = { messageId in
            print("published (msg id=\(messageId)))")
            }



        mqttConfig.onMessageCallback = { mqttMessage in
            print("MQTT Message received: payload=\(mqttMessage.payloadString)")
            let receivedMessage = mqttMessage.payloadString!
            print("from server msg = \(receivedMessage)")

            let data = receivedMessage.data(using: .utf8, allowLossyConversion: false)!
            print("xxxxxxx = \(data)")

            L = receivedMessage

            }

        mqttClient = MQTT.newConnection(mqttConfig, connectImmediately: true)

        mqttClient?.subscribe("topic", qos: 0)
 }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }




    @IBAction func on(_ sender: Any) {
        print("11111")
        mqttClient?.publish(string: "11111", topic: "topic", qos: 1, retain: false)

        self.viewer.text = String(L)

    }

    @IBOutlet weak var viewer: UILabel!



    }

非常感谢您一起来看看!

PS。也许名声比我更好的人可以开始使用Moscapsule标签。

0 个答案:

没有答案