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

2024-05-30

我正在使用数组从数据库读取数据,目前数组中有 8 个项目。我正在尝试制作一个有节标题的表格。目前我有 4 个部分,并且我已正确设置并且它有效。它也可以在第一次运行时运行,但是当我尝试向后滚动时,我发现索引超出了范围。我正在使用 myarray[myindex] 设置每个项目的单元格数据,但这不起作用。

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

有一个更好的方法吗?

我附上了一张图片来描述问题。

Thanks

根据要求添加代码。

  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 DB 获取数据

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 https://stackoverflow.com/questions/34163054/define-object-with-multidimensional-properties/34163684#34163684,你需要的是更新的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"
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数组索引超出范围的表视图 的相关文章

  • 选择退出单个视图的自动布局?

    我有一个在代码中执行其子视图布局的视图 布局对于自动布局来说太复杂 并且自动布局会破坏布局代码 有没有办法强制自动布局不影响该视图的子视图 我尝试过重写layoutSubviews 但没有任何乐趣 谢谢你的帮助 每个情节提要或 XIB 启用
  • 使用 OSX 10.9 和 Xcode 6.1.1 + 自定义输入视图作为 Swift 中文本字段的键盘

    加载自定义输入视图键盘后 我在连接按钮时遇到问题 我的主屏幕是故事板 我的自定义视图是 xib 输入视图是一个 nib 文件所有者指向它的 swift 类 我正在使用另一个视图控制器中的代码加载输入视图 extension UIView c
  • 与 iOS 7.1 持续集成 - 无法安装服务器上链接的产品

    我们已经使用 Xcode 5 0 运行 CI 一段时间了 没有出现任何问题 现在iOS 7 1已经发布了 似乎安装了CI生产的产品你需要使用 https https stackoverflow com questions 20276907
  • 如何动态地从对象中提取所有元素

    如何从对象中提取特定列 我有一个列数组 我希望从对象中提取这些字段 该对象将由作为项目的映射循环函数构造 现在在这里 如何动态检查我的字段 我不想要这样的 item col 0 请告诉我一个捷径 const person firstName
  • 如何循环并访问多维且关联的数组中的各个元素? PHP,JSON 或 XML

    我正在通过 API zotero org 检索书目数据 它与底部的示例类似 只是更复杂 示例是键入的 我想检索一条或多条记录并在页面上显示某些值 例如 我想循环遍历每个顶级记录并以格式良好的引文打印数据 暂时忽略正确的围兜样式 假设我只想为
  • LocalNotifications 的振动和声音

    如何向本地通知添加振动和声音 code UILocalNotification notification UILocalNotification alloc init NSDate firedate settime date notific
  • 使用 JavaScript 查找数组中最接近的日期

    我有一个包含天数的数组 每一天都是一个对象 例如 day year 2012 day month 08 day number 03 day name mon 我还通过使用以下方法向每个日期对象添加了时间戳属性 function conver
  • swift 中的 UITableViewCell 动画

    我正在关注THIS http jamesonquave com blog developing ios 8 apps using swift animations audio and custom table view cells 教程并使
  • 访问 iPhone 上用户的短信

    有没有一种方法可以访问用户的短信 没有互联网连接 显然 不尝试获取客户的消息 并分析应用程序中的文本 如果没有 出于安全原因 这是完全可以理解的 但我想我还是会问 不 你只能发送它们 S http developer apple com l
  • 应用程序名称中的撇号

    我打算在 Apple 商店中发布一款标题中包含撇号的应用程序 我注意到 当 目标 名称包含撇号时 XCode 在构建代码时已经存在问题 我已经通过使用以下字符设法解决了这个问题 暂时 与以下相反 这似乎构建得不错 但我有点担心以后可能会发生
  • 无法使用应用程序加载器将 .ipa 上传到 iTunes

    我正在尝试将我的 iPhone ipa 文件上传到 iTunesconnect 我什至最近通过应用程序加载器成功地将构建上传到 iTunes Connect 但从过去两天开始 当我尝试上传 ipa 时 出现以下错误 并且 ipa 未上传到
  • printf '%s\n' "${array[@]}" 每个数组元素打印一行是否正常?

    在我的 bash 脚本中 我包含了程序所需的一系列其他文件 然后我在帮助说明中打印这些内容 当我使用 printf 进行输出时 我得到了意想不到的结果 我读到 形式 array 通常是首选的扩展默认形式 所以我从它开始 我的数组声明 scr
  • iOS 中的泰米尔字体

    我尝试安装泰米尔字体名称Bamini ttf in xcode 4 2我做了具体的改变info plist 但它没有显示在界面生成器中 任何人都可以帮我解决这个问题吗 据我所知 您安装的新字体永远不会在界面生成器中列出 但是您可以在项目中使
  • 需要从另一个viewController调用其他viewController中的方法

    我有一个具有多个视图控制器的应用程序 其中一些视图控制器包含运行各种任务的方法 我需要做的是 当初始 viewController 加载时 在其他 viewController 中调用这些方法 以便它们在后台运行 但是 我在执行此操作时遇到
  • 如何检索所有连接的蓝牙外围设备

    我正在尝试获取所有连接到 iPhone 的外围设备的列表 我已连接 Bose Soundlink 但它没有显示在我的应用程序中 我不知道 UUID 所以传递 因为这应该得到我想的一切 func centralManagerDidUpdate
  • 如何从 PHP 中的两个不同数组获取公共值

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有两个带有一些用户 ID 的数组 array1 array 5 26 38 42 array2 array 15 36 38 42 我需
  • 如何使用mapkit和swift在设定位置覆盖一个圆圈

    我在尝试弄清楚如何在与用户位置不同的所需位置显示透明圆形或矩形时遇到困难 我是 Mapkit 的初学者 所以提前致谢 class FirstViewController UIViewController MKMapViewDelegate
  • 使用预先存在的数据库创建 PhoneGap iOS 应用程序

    我最近开始开发一个使用 PhoneGap 版本 2 8 0 作为药物查找器的应用程序 过去 我创建了该工具的 Web 版本 它使用 jQuery Mobile 和 PHP 来访问远程 SQL 数据库 PhoneGap 似乎是一个很有吸引力的
  • 如何在构建时自动重置 iPhone 模拟器

    将多个 JSON 文件从应用程序包根目录移动到目录结构内 也在应用程序包中 后 应用程序继续运行 就像文件保留在之前的位置一样 经过一番绞尽脑汁并进行了一次干净的构建后 我记得必须清除 iPhone 模拟器才能删除旧位置中的这些文件 如果能
  • 难以访问在 Interface Builder .xib 文件中创建的 UITableViewCell

    在我的 UITableView 中 对于表格最后一部分的最后一行 我加载了一个特殊的 UITableViewCell 它与表格上的所有其他单元格不同 我在 xib 文件中创建了该单元 并为其指定了重用标识符 endCell 我认为我可以执行

随机推荐