我正在构建一个与套接字定期通信的应用程序。
只要套接字打开,数据就会不时传输。
但是,我的textFields(代表数据)不会自行更新,除非引入另一个视图。
从上图中,我的应用程序最初将扫描QR码作为身份验证方法。假设验证成功并加载了第一个视图(导航控制器之后的视图)。
问题是需要相当长的时间来获取数据。
描述我如何操纵连接的代码。
override func viewDidLoad() {
super.viewDidLoad()
print("First view loaded")
//add observer
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityStatusChanged", name: "ReachStatusChanged", object: nil)
reachabilityStatusChanged()
}
func reachabilityStatusChanged(){
switch reachabilityStatus{
case NOACCESS:
print("No access")
dispatch_async(dispatch_get_main_queue()){
print("No-access")
self.displayAlertMessage("No internet access, please try again later")
}
default:
dispatch_async(dispatch_get_main_queue()){
self.api.reportStatus()
self.api.importData()
socket.connect()
//data will be sent to text field at this point
}
}
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
print("First view appeared")
self.circleProgressView.progress = progressSliderValue
dispatch_async(dispatch_get_main_queue()){
self.distanceLabel.text = "\(appUserMileage)"
self.mileageLabel.text = "Target: \(appUserTarget) km"
}
}
从上面的代码可以看出,当加载视图时(导航控制器后面的视图),它会检查网络访问。如果网络可用,那么它将与套接字通信,但是当数据进入时,视图已经加载并出现,这意味着当时不会显示任何数据。
有没有办法定期更新视图?我做了一些研究,但所有这些研究都是关于背景提取数据,这些数据并不适合我的情况。
答案 0 :(得分:1)
我不知道您的appUserMileage
和appUserTarget
变量在哪里,但这样的事情怎么样?
var appUserMileage: Int? {
didSet {
self.distanceLabel?.text = "\(appUserMileage ?? 0)" //? in case model calls this before outlets are loaded
}
}
var appUserTarget: Int? {
didSet {
self.mileageLabel?.text = "Target: \(appUserTarget ?? 0) km"
}
}