var gradePickerKeys = [String]()
var gradePickerValues = [String]()
var selectedGradeObjectId: String?
query the data from parse, fill the 2 arrays with keys and values.
var query = PFQuery(className:"Grade")
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.gradePickerKeys.append(object.objectId)
self.gradePickerValues.append(name)
self.gradePicker?.reloadAllComponents()
self.gradeTextField.text = self.gradePickerValues.first
self.selectedGradeObjectId = self.gradePickerKeys.first
}
} else {
// Log details of the failure
println("\(error.userInfo)")
}
}
// functions needed for picker view
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return gradePickerValues.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return gradePickerValues[row]
}
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int){
gradeTextField.text = gradePickerValues[row]
selectedGradeObjectId = gradePickerKeys[pickerView.selectedRowInComponent(0)] // array value
self.view.endEditing(true)
}
Saving the pointer
let gradeObjectId = PFObject(withoutDataWithClassName: "Grade", objectId: selectedGradeObjectId)
var user = PFUser()
user["grade"] = gradeObjectId
user.signUpInBackgroundWithBlock {....
Maybe one day someone can show me a better solution...
languages = [1:"English", 2:"Latin", 3:"Spanish", 4:"French"]
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
var languageNames = Array(languages.values)
return languageNames[row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
var languageIds = Array(languages.keys)
println("item id:\(languageIds[row])")
}
Then you will need to find the key for a given value (Swift does not have this method, but Objective-C does)
map(filter(dict) { _, value in value == 1 }) { key, _ in key }
lazy(dict).filter { _, value in value == 1 }.map { key, _ in key }.array