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生命周期:
所以,你有两个选择:
在先前的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.
所以你需要在viewDidLoad中调用你的函数,并在完成异步网络调用后始终设置你的pickerView.| 归档时间: |
|
| 查看次数: |
1543 次 |
| 最近记录: |