数组索引超出范围的表视图

我正在使用数组从数据库中读取数据,目前我有8个项目在数组中。 我正在试图制作一个表,其中有一个部分标题。 目前我有4个部分,我已经设置好,它的工作原理。 它也是第一次运行,但是当我试着回滚时,我得到一个超出范围的索引。 我正在使用myarray [myindex]来设置每个项目的单元格数据,这是行不通的。

看起来我需要将我的数据分成4个部分,每个部分只包含每个部分的数据,以使表视图正确控制它。 数据可以包含任意数量的部分。

有一个更好的方法吗?

我附上了一张照片来描述这个问题。

表的屏幕截图

谢谢

根据要求添加代码。

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections print("Returning Sections - > \(sections)") return sections //seems to work } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // #warning Incomplete implementation, return the number of rows print("Return number of rows in section -> \(noRowsInSection[section])") return noRowsInSection[section] // seems to work } override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return sectionHeader[section] // seems to work } override func tableView(tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) { // Format for section Headers let header:UITableViewHeaderFooterView = view as! UITableViewHeaderFooterView header.textLabel!.textColor = UIColor.blueColor() UIColor.blueColor() header.textLabel!.font = UIFont.boldSystemFontOfSize(12) header.textLabel!.frame = header.frame header.textLabel!.textAlignment = NSTextAlignment.Right } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("OurCell", forIndexPath: indexPath) as! OurTableViewCell print("myindex - > \(myindex) row -> \(indexPath.row)") cell.OurCellLabel.text = MyHouses[myindex].getAddressDetails() // End configure houses.cell //cell.OurCellLabel.text = MyHouses[indexPath.row].getAddressDetails() // End configure houses.cell myindex++ // PROBLEM HERE - GOES OUT OF RANGE return cell } 

这里我从sqlite数据库获取数据

 func GetListOfHousesFromDB() { let docsDir = dirPaths[0] let databasePath = docsDir.stringByAppendingString("/newdb.db") if fileMgr.fileExistsAtPath(databasePath as String) { let houseDB = FMDatabase(path: databasePath as String) if houseDB.open() { var noRows: Int = 0 var sql = "select count(Address) as cnt from Houses" // Define Query houseDB.executeStatements(sql) // Execute Query let results:FMResultSet? = houseDB.executeQuery(sql,withArgumentsInArray: nil) //Get results from Query if results?.next() == true { let cnt = (results?.stringForColumn("cnt"))! // Retrieve number of rows from DB noRows = Int(cnt)! } var i = 0 sql = "SELECT Address, Street, City, State, Zip from Houses ORDER BY State, City, Street, Address" // Define Query houseDB.executeStatements(sql) // Execute Query let results2:FMResultSet? = houseDB.executeQuery(sql,withArgumentsInArray: nil) // Get results from Query while results2?.next() == true { MyHouses.append(newhouse()) MyHouses[i].address = (results2?.stringForColumn("Address"))! MyHouses[i].street = (results2?.stringForColumn("Street"))! MyHouses[i].city = (results2?.stringForColumn("City"))! MyHouses[i].state = (results2?.stringForColumn("State"))! MyHouses[i].zip = (results2?.stringForColumn("Zip"))! print("Address -> \(i) \(MyHouses[i].getAddressDetails())") i++ } } houseDB.close() } } 

根据你的其他post ,你需要的是一个更新的House模型和更新的数据结构来处理你的表格视图的数据。

House – 模型类

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

辅助类用于加载数据

 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 = [] } } } 

表视图控制器

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