如何定期更新文本字段?

时间:2016-03-25 10:34:19

标签: ios xcode swift sockets

我正在构建一个与套接字定期通信的应用程序。

只要套接字打开,数据就会不时传输。

但是,我的textFields(代表数据)不会自行更新,除非引入另一个视图。

Photo

从上图中,我的应用程序最初将扫描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"
    }
}

从上面的代码可以看出,当加载视图时(导航控制器后面的视图),它会检查网络访问。如果网络可用,那么它将与套接字通信,但是当数据进入时,视图已经加载并出现,这意味着当时不会显示任何数据。

有没有办法定期更新视图?我做了一些研究,但所有这些研究都是关于背景提取数据,这些数据并不适合我的情况。

1 个答案:

答案 0 :(得分:1)

我不知道您的appUserMileageappUserTarget变量在哪里,但这样的事情怎么样?

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"
    }
}