当使用Parse

时间:2019-01-23 07:49:36

标签: ios swift

代码

class Trackbooking: UIViewController {
 var bookid=String()
@IBOutlet weak var loadingBar: UIActivityIndicatorView!

override func viewDidLoad() {
    super.viewDidLoad()
    print("track\(bookid)")

    loadingBar.startAnimating()




    let query=PFQuery(className: "bookings")

    query.whereKey("objectId", equalTo:bookid)
    do {
        var results=try query.getFirstObject()["Booked"] as! Int
       print(results)

        repeat{
              sleep(2)
            results=try query.getFirstObject()["Booked"] as! Int
            print("wait for it")

        }while results==0





    } catch {
        print("Unexpected non-vending-machine-related error: \(error)")
    }

}

}

据我所知,视图是在视图集之后执行加载的,但是当我运行此代码时,我的视图仅在重复while语句之后显示,为什么呢,

1 个答案:

答案 0 :(得分:0)

  

据我所知,视图集设置后是否执行了加载

是的!并且viewDidLoad运行正常。但是,“已设置视图”仅意味着self.view不会为零。这并不意味着您可以看到该视图。将视图保存在内存中并不意味着显示该视图。我可以像这样在内存中查看一个视图:

let view = UIView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

运行上述代码行后是否可以查看视图?不。

您应该在viewDidAppear内编写代码:

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    let query=PFQuery(className: "bookings")

    query.whereKey("objectId", equalTo:bookid)
    do {
        var results=try query.getFirstObject()["Booked"] as! Int
       print(results)

        repeat{
              sleep(2)
            results=try query.getFirstObject()["Booked"] as! Int
            print("wait for it")

        }while results==0





    } catch {
        print("Unexpected non-vending-machine-related error: \(error)")
    }
}

使用sleep(2)可能不是一个好主意,因为它会冻结应用程序,并且在此期间它无法响应用户交互,这会带来糟糕的用户体验。我建议您使用以2秒的固定速率安排的Timer

Timer.scheduledTimer(withTimeInterval: 2, repeats: true) { (timer) in
    do {
        var results=try query.getFirstObject()["Booked"] as! Int
        print("wait for it")
        if results != 0 {
            timer.invalidate() // stops the timer
        }
    } catch {
        print("Unexpected non-vending-machine-related error: \(error)")
    }
}