簡體   English   中英

parse.com - 在iOS中獲取對象延遲

[英]parse.com - Get Object delay in iOS

我想得到一個對象並打印出來。 所以我創建了一個函數來處理獲取對象並將其返回。

問題是,對象打印得太早。

這是我的功能:

func getParseObject(){
  println("i'm inside the function")
  var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
    } else {
      //error
    }
  }
  return object
}

這就是電話:

var data = getParseObject()
println("data is: \(data)")

這是控制台的輸出:

我在功能里面

數據是:

對象成功檢索

處理這個問題的最佳解決方案是什么?

非常感謝!

你的問題是你在做異步請求,請求是在后台執行的。 因此,您在恢復服務器上的數據之前返回對象。

如果要顯示需要同步的函數返回的值:

func getParseObject() -> PFObject {
    var object : PFObject?
    let query = PFQuery(className: "testClass")
    let result =  query.getObjectWithId("OWXnWkL")
    if result != nil {
        object = result
    }
        return object!
}

否則你必須與處理程序一起工作:

var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
      // Do something with the object!
    } else {
      //error
    }

我希望我能幫到你

Ysee}

您需要在異步請求的回調中返回您的對象值如下所示:

func getParseObject(){
  println("i'm inside the function")
  var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
    } else {
      //error
    }

    return object // <-- Return your value here
  } // <-- Asynchronous request ends here

}

來自getObjectInBackgroundWithId方法的閉包中的代碼是異步的,需要更多時間才能完成。 所以在閉包結束后編寫的代碼將首先運行。

func getParseObject(){
  println("i'm inside the function")
  var query = PFQuery(className: "testClass")
  query.getObjectInBackgroundWithId("OWXnWkL") {(tempObject: PFObject?, error: NSError?) -> Void in
    if error == nil && tempObject != nil {
      println("object retrieved with success")
//THIS RUNS SECOND::::::::
        } else {
          //error
        }
      }
      return object
    }
    var data = getParseObject()
    println("data is: \(data)") //:::::THIS RUNS FIRST::::::

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM