Table view from array index out of range

后端 未结 1 929
滥情空心
滥情空心 2021-01-27 07:58

I\'m using an array to read data from a database, Currently I have 8 items in the array. I am trying to make a table where I have a section header. Currently I have 4 sections a

相关标签:
1条回答
  • 2021-01-27 08:24

    Based on your other post, what you need is an updated House model and updated data structure for handling data for your table view.

    House - Model class

    struct House {
        var address: String
        var street: String
        var city: String
        var state: String
        var zip: String
    
        func getAddressDetails() -> String {
            return "\(address) \(street) \(city) \(state) \(zip)"
        }
    
        func getCityState() -> String {
            return "\(city) - \(state)"
        }
    }  
    

    Helper Class for loading data

    class HouseDataHelper {
    
        private static let _sharedInstance = HouseDataHelper()
        var myHouses: Dictionary<String, [House]> = [:]
    
        private init() {
            loadHouseData()
        }
    
        static func sharedInstance() -> HouseDataHelper {
            return _sharedInstance
        }
    
        private func loadHouseData() {
            var houses = [House]()
    
            //Populating your actual values here. GetListOfHousesFromDB()
    
            //Loading dummy data for testing
            var sectionHeader = ""
            for i in 0...4 {
                sectionHeader = "Header \(i)"
                houses += [House(address: "Address1", street: "Street1", city: "City1", state: "State1", zip: "Zip1")]
                houses += [House(address: "Address2", street: "Street2", city: "City2", state: "State2", zip: "Zip2")]
                houses += [House(address: "Address3", street: "Street3", city: "City3", state: "State3", zip: "Zip3")]
                houses += [House(address: "Address4", street: "Street4", city: "City4", state: "State4", zip: "Zip4")]
                houses += [House(address: "Address5", street: "Street5", city: "City5", state: "State5", zip: "Zip5")]
    
                myHouses.updateValue(houses, forKey: sectionHeader)
                houses = []
            }
        }
    }
    

    Table View Controller

    class TableViewController: UITableViewController {
    
        var houses = HouseDataHelper.sharedInstance().myHouses
        var sectionHeaders: [String] = []
    
        override func viewWillAppear(animated: Bool) {
            super.viewWillAppear(animated)
    
            sectionHeaders = Array(houses.keys.sort())
        }
    
        override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
            return houses.count
        }
    
        override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if let rows = houses[sectionHeaders[section]] {
                return rows.count
            }
    
            return 0
        }
    
        override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
            return sectionHeaders[section]
        }
    
        override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
            //Populate cells based on "houses"
        }
    }
    
    0 讨论(0)
提交回复
热议问题