【问题标题】:What to do when error thrown in tableView(_:numberOfRowsInSection:)?tableView(_:numberOfRowsInSection:) 中抛出错误怎么办?
【发布时间】:2017-03-04 12:08:22
【问题描述】:

在我的 iOS 应用程序中,我有一个带有 items 表的 SQLite 数据库,该表有很多行。我避免将所有项目加载到内存中,而是只加载当前在UITableView 中显示的项目。

我正在使用SQLite.swift,它可以在与数据库交互时使用throw。如果从items 表中获取计数是throw,那么正确的做法是什么?

我已尝试显示用户无法像这样关闭的警报。

class ItemsController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var items: Items!

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var count = 0
        do {
            count = try items.getCount();
        }
        catch {
            // present a fatal error message
            let alert = UIAlertController(
                            title: "Fatal Error",
                            message: "\(error)",
                            preferredStyle: .alert)
            self.present(alert, animated: true, completion: nil)
        }
        return count
    }

    // ...
}

Items 类是这样的。

class Items {

    var connection: Connection

    func getCount() throws -> Int {
        return try connection.scalar("SELECT count(*) FROM items") as! Int
    }

    // ...
}

【问题讨论】:

    标签: ios swift sqlite uitableview sqlite.swift


    【解决方案1】:

    如果您使用DZNEmptyDataSet 之类的东西,那么您可以在视图控制器上拥有一个状态变量并拥有不同的状态,例如 .loading、.showing、.empty、.error。对于 .showing 以外的任何状态,您将返回 0 的行数,并改为显示 DZNEmptyDataSet。因此,例如,如果您的数据无法加载,那么您将状态设置为 .error 并调用 tableView.reloadData() 来调用 emptySetDatasource 方法,您可以在其中指定错误消息。如果您有刷新控件,用户可以拉动刷新,然后将状态恢复为 .loading 并重试。这就是由 REST 数据支持的表格视图在大多数流行应用中的工作方式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-27
      • 2021-07-11
      • 2012-06-06
      • 1970-01-01
      • 2012-09-06
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多