好的,首先,我是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标签。