Загрузка данных с сервера в PickerView IOS Swift 4.2 - PullRequest
0 голосов
/ 30 января 2019

Я работаю над приложением IOS, в котором я хочу показать данные с сервера в моем PickerView.Я очень новичок в Ios Development, поэтому меня смущает, как загрузить любые ParseObject данные в мои PickerView.My ParseObject содержит значения "title" и "status".Я хочу показать значение "title" из ParseObject в моем PickerView, чтобы позже, если я нажму PickerView, я также смогу получить этот ParseObject.Мой код приведен ниже. Пожалуйста, объясните мне, как показать данные ParseObject в моем PickerView.

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)
                }
            }
        }

    }

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Получить объект из selectPositionsData [] принадлежит index / row и получить значение его свойства из ParseObject.Нет необходимости перебирать строку из selectPositionsData [], чтобы разделить массив для заголовков.

func pickerView(_ pickerView: UIPickerView,
                    titleForRow row: Int,
                    forComponent component: Int) -> String? {

        // Return a string from the array for this row.
        return  selectPositionsData[row].value(forKey: "title")
    }
0 голосов
/ 30 января 2019

в вашем методе pickerViewDidSelect получите следующее значение:

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            let title = self.selectPositionsData[row].value(forKey: "title") as! String
            let status = self.selectPositionsData[row].value(forKey: "status") as! String

           let objectAtIndex = self.selectPositionsData[row]
        }
...