ios - Swift 3 中的 UIPickerView 和子类 Array

标签 ios firebase swift3 firebase-realtime-database uipickerview

我是 Swift 和 Firebase 的新手,但我正在构建一个应用程序,它在一个 View Controller 中使用一个选择器 View ,填充它的数据来自一个 Firebase 结构,该结构将数据放入一个数组中,参数存储在一个子类中。

我可以看到调试器控制台中打印的所有数据(Firebase 可以在此处运行)向我显示数组从 Firebase 接收数据(并且我可以在这个新 Controller 中使用带有按钮的方法插入新项目也是),但看起来 pickerview 的方法(numberOfCOmponentsnumberOfRowsInComponenttitleforRow)在 viewDidLoad 之前初始化,其中发生了将数据从 Firebase 带到数组的方法,我有一个 count = 0

我的 pickerview 是空的。我没有崩溃。在调试器控制台,我可以看到打印的 count = 0 然后,在 viewDidLoad 方法的末尾放置一个 print,它计数我实际上有多少个寄存器并显示它们。

我想知道在 pickerview 方法执行之前,我应该如何使用 Firebase 数据填充数组,并且这些数据与 pickerview 行有关。谢谢。

var refw2: [PickerArrayClasses] = []
@IBOutlet weak var pckProfessores: UIPickerView!

override func viewDidLoad() {
    super.viewDidLoad()

    let refW = FIRDatabase.database().reference().child("avaliacao").child("equipe")
    refW.queryOrdered(byChild: "nomePreceptor").observe(.value, with: {(snapshot) in

        var newTeste2: [PickerArrayClasses] = []
        for resposta in snapshot.children {
            let itemsAadicionar = PickerArrayClasses(snapshot: resposta as! FIRDataSnapshot)
            newTeste2.append(itemsAadicionar)
        }
        self.refw2 = newTeste2
        print("ITENS NO ARRAY RefW2 \(newTeste2)")
    })

    self.pckProfessores.delegate = self
    self.pckProfessores.dataSource = self
    self.pckAvaliador.delegate = self
    self.pckAvaliador.dataSource = self

}

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        print("CONTAR ITENS NO REFW2 - SECAO COUNT = \(refw2.count)")
        return refw2.count
 }

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
   return refw2[row].nomePrecep
 }

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    let PreceptorEscolhido = refw2[row].nomePrecep
     print("PRECEPTOR ESCOLHIDO: \(PreceptorEscolhido)")
}

调试器控制台中的信息

CONTAR ITENS NO REFW2 - SECAO COUNT = 0
ITENS NO ARRAY RefW2 
[ChkList.PickerArrayClasses(nomePrecep: Optional("2222222222"), key: -KYiOkUH1cFXj7q7LkTi),
ChkList.PickerArrayClasses(nomePrecep: Optional("33333"), key: -KYiOvOjfxZpuUkxM4bn),
ChkList.PickerArrayClasses(nomePrecep: Optional("5555555555555555555"), key: -KYiPsHTumA0qdTKkbMT),
ChkList.PickerArrayClasses(nomePrecep: Optional("77777"), key: -KYikQ5dveM3L7JielTt), 
ChkList.PickerArrayClasses(nomePrecep: Optional("MARK BONINHA"), key: -KYi7XofWn9Um6FVV3M6), 
ChkList.PickerArrayClasses(nomePrecep: Optional("OUTRO MARK"), key: -KYi7t6OEllWTmMl655T), 
ChkList.PickerArrayClasses(nomePrecep: Optional("dfddf"), key: -KYiI8sTLE6G3olzOtAJ)]

最佳答案

我可以通过将以下行添加到 viewDidLoad 方法中来解决此问题:

self.pckProfessores.reloadAllComponents()

就在 self.refw2 = newTeste2 行之后。

关于ios - Swift 3 中的 UIPickerView 和子类 Array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41088805/

相关文章:

objective-c - 对于强集合实例,赋值给nil等于释放赋值给nil吗?

Firebase 函数 : Unclear "connection error"

angular - 如何使用 Angular Firestore 获取集合中的文档列表

swift - 如何为每个象限创建一个末端为圆角的圆

ios - 在 Objective C 中重新分配 NSArray 值时出现问题

ios - NSStackView subview 不调整子堆栈 View 的大小

ios - 使用 MKGeodesicPolyline Swift 3 计算距离将出现错误

swift - 在 Swift 中使用嵌入式数据对操作码进行建模的惯用方法

ios - NSURLSessionConfiguration timeoutIntervalForRequest 似乎不适用于后台 session

swift - 查询等于 true 的值