【问题标题】:Swift - How to create an instance of an object whose variables are data from Parse?Swift - 如何创建一个对象的实例,其变量是来自 Parse 的数据?
【发布时间】:2015-05-17 16:14:24
【问题描述】:

在我的 Xcode 项目中,我有一个名为 Question 的类,带有实例变量:

import Foundation

class QuestionModel {
 let question: String?
 let answers: [String]
}

我在 parse.com(命名为 Question)数据库上也有一个类,其中包含我创建的一个对象,我添加了三列(一个字符串名称问题、一个名为答案的字符串数组和一个名为问题日期的字符串,以便我可以访问它)。

在我的视图控制器上,我想用解析中的数据创建一个 Question 类的实例:

let newQuestion = QuestionModel()

var query = PFQuery(className:"Questions")
query.whereKey("date", equalTo:"5/17/15")
query.findObjectsInBackgroundWithBlock {
  (objects: [AnyObject]?, error: NSError?) -> Void in

  if error == nil {
    // The find succeeded.
    println("Successfully retrieved \(objects!.count) scores.")
    // Do something with the found objects
    if let objects = objects as? [PFObject] {
      for object in objects {
        newQuestion.options = object["options"] as? [String]
      }
    }
  } else {
    // Log details of the failure
    println("Error: \(error!) \(error!.userInfo!)")
  }

}

println(newQuestion.options)

它显示它找到了 1 个对象 但是当我添加最后一个 println 时,它打印为零。为什么不打印我在 Parse 数据库中添加的问题字符串?

【问题讨论】:

  • 最后一个 printLn 首先运行,甚至在查询开始之前。块参数中的代码在查询完成后运行。在该块运行之前没有要打印的内容。
  • 感谢您的回答!但是我怎样才能让查询和块代码在我使用问题的实例之前运行呢?
  • 仅在块内使用它,或者从您从块中调用的某些方法中使用它。

标签: ios swift parse-platform ios8


【解决方案1】:

带有完成块的异步方法很棘手,因为代码不会按照您在源文件中找到的顺序执行...

// edit - outside of this method, in the containing class:
var question: QuestionModel

query.findObjectsInBackgroundWithBlock {
  (objects: [AnyObject]?, error: NSError?) -> Void in
      self.question.options = // ...
      // use objects here, e.g. what your posted code does
      // update your UI with objects here, because they are valid here
      println("this runs SECOND")
      // no matter what you assign in here...
}

// ...it won't be accessible here, because this code runs *before* the code
// in the block
println("this runs FIRST")

【讨论】:

  • 谢谢,我明白了!但是,如果我想从 Parse 获取数据并在此块之外使用它,即在我创建的实例上(在这种情况下为问题)并在我的项目中使用它,我该怎么办?这是否意味着这不是我使用的正确方法?
  • 我真正想要的是创建问题类的实例,因为我使用从该方法获得的数据发布了代码。你有什么建议?谢谢
  • 我想更有指导性,但我是 Swift 的业余爱好者。您发布的构建 newQuestion 的代码看起来不错,但如果您希望它比完成块持续更长时间,则应将其分配给包含我们正在讨论的代码的类的属性。我假设,最终,您希望用户看到一些结果。这也必须从块内启动。请参阅编辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多