尝试让numberOfRowsInSection计数等于Swift中另一个文件的数组计数

时间:2018-08-02 02:13:44

标签: ios arrays swift uitableview

当前,我正在从Firebase中获取数据,将数据转换为对象数组,并尝试将该数组的计数作为“ numberOfRowsInSection”的计数。 因此,我在声明数组的视图控制器上获得了正确的计数,但是当我将该数据传递给tableview控制器时,我一直得到0。

下面,我显示了要在其中获取数据并将其放入经过过滤的数组中的ViewController:

 func fetchAllData( completion: @escaping (_ call: [Restaurant]) -> Void) {

    self.ref = Database.database().reference()
    self.ref?.observe(.value, with: { (snap) in
        guard let topArray = snap.value as? [[String:Any]] else {print(":(") ; return }
        var restaurantArray = [Restaurant]()

        for dictionary in topArray {
            self.restaurantGroup.enter()
            guard let address = dictionary["Address"] as? String,
                let city = dictionary["City"] as? String,
                let inspectionDate = dictionary["Inspection Date"] as? String,
                let name = dictionary["Name"] as? String,
                let major = dictionary["Number of Occurrences (Critical Violations)"] as? Int,
                let minor = dictionary["Number of Occurrences (Noncritical Violations)"] as? Int,
                let violationTitle = dictionary["Violation Title"] as? String else { continue }
            print(2)
            //MARK: - creates restaurants from the list above
            let restaurant = Restaurant(address: address, city: city, inspectionDate: inspectionDate, name: name, major: major, minor: minor, violationTitle: violationTitle)

            print(3)
            //MARK: - Adds a restaurant to restaurant array instance
            restaurantArray.append(restaurant)
        }
        self.restaurantList = restaurantArray
        self.restaurantGroup.leave()
        completion(self.restaurantList)

        let dictionaryNew = Dictionary(grouping: self.restaurantList) { $0.name + " " + $0.address}

        self.restaurantListModified = dictionaryNew
        print(self.restaurantListModified.count)
     })
     }

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

    var filteredArray = [[Restaurant]]()
    guard let userSearch = searchBar.text?.uppercased() else { return }
    pulleyViewController?.setDrawerPosition(position: .partiallyRevealed, animated: true)

    var nameArray = [String]()

    for (key, value) in restaurantListModified {

        if value[0].name.hasPrefix(userSearch.uppercased()){
            filteredArray.append(value)
        }
    }

    for subarray in filteredArray {
        let nameArrayForTBView = subarray[0].name
        nameArray.append(nameArrayForTBView)
    }
    self.tableViewNameArray = nameArray
    print("\(tableViewNameArray.count)")
    print("this First")
}
}

tableViewNameArray是我试图传递给此tableView Controller的数组

   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    print("This second")
   print(MapViewController.sharedMapViewController.tableViewNameArray.count)

    return MapViewController.sharedMapViewController.tableViewNameArray.count

}

我也将数组设置为一个通知中心,该通知中心在tableView Controller中接收,如下所示:

var tableViewNameArray = [String]() {

    didSet {
        DispatchQueue.main.async {
          DispatchQueue.main.async {
        NotificationCenter.default.post(name: MapViewController.RestaurantNotification.notificationSet, object: self)
        }
        }
    }
}

点:

  1. 我来自viewcontroller的数组在视图控制器上获得了正确的计数,但没有将准确的计数传递给tableView Controller。
  2. 要传递的数组的tableview计数为0

1 个答案:

答案 0 :(得分:0)

我发现@Kamran指出的问题。我没有分配self.tableViewNameArray = nameArray。所以我改变了

var tableViewNameArray to 
static var tableViewNameArray

如果您像我一样不熟悉编程,请确保您阅读了更多有关局部和全局变量的内容。非常有帮助。