2015-12-05 1 views
1

Я относительно новичок в Swift. Я столкнулся с проблемой при использовании PFQuery в pickerView.Проблема сохранения PFобъектов в массив при использовании pickerView

Я пытаюсь реализовать два компонента pickerView, как показано ниже:

Компонент 0: Компонент 1

"А": "Altivo", "Altrez"

"В": «Беверли», «Бижу»

Выбор «A» из компонента 0 будет показывать «Altivo», «Altrez» в компоненте 1

значения из компонента 1 запрашиваются из Разбираем с использованием значения из компонента 0

Вот мой код:

var condoNameList: [String] = [String]() 
var condoPicker = UIPickerView() 
var condoAlphabet: [String] = [String]() 
private let prefixComponent = 0 
private let condoNameComponent = 1 


override func viewDidLoad() { 
    super.viewDidLoad() 
    condoAlphabet = ["A", "B"] 
} 

//Start: For condoName picker 
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
    return 2 
} 

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if component == prefixComponent{ 
     return condoAlphabet.count 
    }else { 
     return self.condoNameList.count 

    } 
} 

func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if component == prefixComponent { 
     condoNameList.removeAll() 
     let query = PFQuery(className: "condodirectory") 
     let selectedalphabet: String = condoAlphabet[row] as String! 

     query.whereKey("condoName", hasPrefix: selectedalphabet) 
     query.findObjectsInBackgroundWithBlock{ 
      (objects:[PFObject]?, error:NSError?)->Void in 

      if error == nil{ 
       for object in objects!{ 
        //print(object) 
        let condoName:String = object["condoName"] as! String 
        self.condoNameList.append(condoName) 
       } 
      } 
      //print("condo Name List is \(self.condoNameList)") //Position 1 
     } 
     print("condo Name List is \(self.condoNameList)") //Position 2 
     condoPicker.reloadComponent(condoNameComponent) 
     condoPicker.selectRow(0, inComponent: condoNameComponent, animated: true) 
    } 
} 

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if component == prefixComponent{ 
     return condoAlphabet[row] 
    }else { 
     return self.condoNameList[row] 
    } 
} 

Вопрос находится в положении 1, функция печати может распечатать condoNameList, но в положении 2 печатает пустой массив. В результате список для компонента 1 не отображается в PickerView.

Кто-нибудь знает почему?

Заранее благодарим за помощь.

+0

Ваше положение печати 2 находится за пределами блока. В этом случае печать выполняется перед запросом. Все внутри блока происходит после запроса –

ответ

1

Мне удалось решить проблему из другого потока, используя метод didset {}.

var condoNameList: [String] = [] { 
     didSet { 
      self.condoNameListTemp = condoNameList 
      condoName.inputView = condoPicker 
      condoPicker.reloadAllComponents() 
     } 
    } 
Смежные вопросы