【发布时间】:2019-01-30 11:15:59
【问题描述】:
我正在开发 IOS 应用程序,我想在我的 PickerView 中显示来自服务器的数据。我对 Ios Development 很陌生,这就是为什么我很困惑如何在我的PickerView 中加载任何ParseObject 数据。我的 ParseObject 包含“标题”和“状态”值。我想在我的 PickerView 中显示来自 ParseObject 的“title”的值,所以稍后如果我点击 PickerView 我也可以得到那个 ParseObject。我的代码如下,请指导我如何在我的 PickerView 中显示 ParseObject 数据。
import Foundation
import UIKit
import Parse
class SignUpViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var positionPickerOutlet: UIPickerView!
var pickerData: [String] = [String]()
var selectPositionsData: [PFObject] = [PFObject]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.positionPickerOutlet.delegate = (self as UIPickerViewDelegate)
self.positionPickerOutlet.dataSource = (self as UIPickerViewDataSource)
getPositionData()
}
@IBAction func cancelFunction(_ sender: Any) {
dismiss(animated: true, completion: nil)
print("Sign Up Canceled")
}
func pickerView(_ pickerView: UIPickerView,
numberOfRowsInComponent component: Int) -> Int {
// Row count: rows equals array length.
return pickerData.count
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView,
titleForRow row: Int,
forComponent component: Int) -> String? {
// Return a string from the array for this row.
return pickerData[row]
}
// 这里我调用 ParseQuery 函数并获取 ParseObject 列表并将其放入我的 selectPositionsData 数组中。
func getPositionData(){
let parseQuery = PFQuery(className:"UserPosition")
parseQuery.limit = 100
parseQuery.order(byAscending: "createdAt")
parseQuery.whereKey("status", equalTo: true)
parseQuery.findObjectsInBackground { (objects :[PFObject]?, error: Error?) in
if objects != nil {
// do something with the array of object returned by the call
for parseObject in objects! {
self.selectPositionsData.append(parseObject)
// Here I am putting parseObject "title" in my array.
self.pickerData.append(parseObject.value(forKey: "title") as! String)
}
print(self.selectPositionsData)
self.positionPickerOutlet.reloadAllComponents()
} else {
print(error?.localizedDescription as Any)
}
}
}
}
【问题讨论】:
-
你的 ViewController 符合 UIPickerViewDataSource 和 UIPickerViewDelegate 吗?我的猜测是它没有,因为您试图将“self”转换为 UIPickerViewDataSource 和 Delegate。换个方式问:你的 numberOfRowsInComponent 是否触发了?
-
@Teetz 感谢您的回复。没有 ViewController 没有扩展 UIPickerViewDataSource 和 UIPickerViewDelegate。我是否也必须使用这两个?
-
编辑您的问题并向我们展示整个 ViewController(带有声明)。我认为您的 ViewController 应该符合 UIPickerViewDataSource。然后你不需要将 self 转换为 UIPickerViewDataSource (委托相同)
-
@Teetz 对不起.. 刚才我检查了一下.. 我正在使用它们。我正在编辑我的问题并将我的完整 ControllerView
-
问题是您将数据解析为“self.selectPositionsData”,但 PickerView 的数据源是 pickerData(从您的代码中我可以看到它是空的)
标签: ios swift uipickerview