【问题标题】:parse.com - Get Object delay in iOSparse.com - 在 iOS 中获取对象延迟
【发布时间】:2015-05-21 17:07:26
【问题描述】:

我想获取一个对象并打印它。 所以我创建了一个函数来处理获取对象并将其返回。

问题是,对象打印得太早了。

这是我的功能:

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

这是控制台的输出:

我在函数里面

数据是:

成功检索对象

解决这个问题的最佳解决方案是什么?

非常感谢!

【问题讨论】:

    标签: ios swift parse-platform return-value


    【解决方案1】:

    您的问题是您正在执行异步请求,该请求是在后台执行的。因此,您在恢复服务器上的数据之前返回对象。

    如果要显示需要同步的函数返回的值:

    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
        }
    

    希望对你有帮助

    是的 }

    【讨论】:

      【解决方案2】:

      您需要在异步请求的回调中返回您的对象值,如下所示:

      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
      
      }
      

      【讨论】:

      • 这很有趣,谢谢。我在关闭大括号之前返回对象时遇到了一些问题,因为错误表示该函数没有返回任何内容
      【解决方案3】:

      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::::::
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-15
        相关资源
        最近更新 更多