ios swift parse:具有异步结果的方法

use*_*112 3 asynchronous ios swift

当我去viewController时,我在我的viewDidAppearMethod中调用一个函数:

override func viewDidAppear(animated: Bool) {
    getLessons()
}
Run Code Online (Sandbox Code Playgroud)

这个方法从parse.com加载我想在pickerView中使用的数据列表.功能本身:

func getLessons(){
        var query = PFQuery(className:"Lesson")
        query.orderByAscending("name")
        query.findObjectsInBackgroundWithBlock {
            (objects: [AnyObject]!, error: NSError!) -> Void in
            if error == nil {

                for object in objects {

                    var name = object["name"] as String

                    self.languagePickerKeys.append(object.objectId)
                    self.languagePickerValues.append(name)

                    self.selectedLanguage.text = self.languagePickerValues.first // set the first lessons name into the text field
                    self.selectedLessonObjectId = self.languagePickerKeys.first // set the first objectId for the lesson

                    self.languagePicker?.reloadAllComponents()

                }
            } else {
                // Log details of the failure
                println("\(error.userInfo)")
            }
        }
        println("getLessons done")
    }
Run Code Online (Sandbox Code Playgroud)

问题是,文本字段为空,因为getLesson()获取数据异步并且数据不可用于文本字段.

我也尝试将getLesson放入viewDidAppear方法中,但这对我没有帮助,无论如何,textfield都是空的.

我可以做什么,在getLessons()向用户显示视图时,准备好方法中的数据并将其第一个值加载到我的文本字段中?

sas*_*tch 12

在将其设置为pickerView之前,您必须从asyncTask获取数据.

这是实例化后的ViewController生命周期:

  • 如果被诱惑准备.
  • 插座设置
  • 出现和消失.

所以,你有两个选择:

  1. 在先前的ViewController中加载数据,然后执行segue.您需要按照以下步骤操作.

    一个.从之前的ViewController创建一个segue到ViewController.

    湾 当你想要下一个获取数据的ViewController,以及performSegueWithIdentifier将导致你的ViewController 的结束(获取数据之后)调用之后,调用该函数.

    C.设置数据prepareForSegue

    let navigationController = segue.destinationViewController as UINavigationController
    
    navigationController.data = yourData //you got from async call
    
    Run Code Online (Sandbox Code Playgroud)

现在,当您到达ViewController时,您确定您的数据存在,并且您可以将其设置为pickerView.

  1. 如果你想在同一个ViewController中做到这一点:这里是ViewController的lifeCycle:生命周期所以你需要在viewDidLoad中调用你的函数,并在完成异步网络调用后始终设置你的pickerView.