【发布时间】:2015-02-27 09:37:38
【问题描述】:
当我转到 viewController 时,我在 viewDidAppear 方法中调用了一个函数:
override func viewDidAppear(animated: Bool) {
getLessons()
}
此方法从 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")
}
问题是,文本字段是空的,因为 getLesson() 获取数据异步并且数据对文本字段不可用。
我也尝试将 getLesson 放入 viewDidAppear 方法中,但这对我没有帮助,文本字段还是空的。
当视图显示给用户时,我该怎么做才能准备好来自getLessons() 方法的数据并将其第一个值加载到我的文本字段中?
【问题讨论】:
-
触摸 UI 必须在主线程中完成(如 reloadComponents)
-
对不起,我不明白你的问题?
-
dispatch_async(dispatch_get_main_queue(), { () -> Void in self.languagePicker?.reloadAllComponents() }) -
Larme,这给了我一个错误:无法将表达式类型 (dispatch_queue_tl, () -> Void) 转换为类型 'Void'
-
您是否已注销您的对象并检查您是否确实在接收数据? - 你的语言选择器数组是在哪里定义的?
标签: ios swift asynchronous