繁体   English   中英

在tableView(_:numberOfRowsInSection :)中引发错误时该怎么办?

[英]What to do when error thrown in tableView(_:numberOfRowsInSection:)?

在我的iOS应用中,我有一个SQLite数据库,其中的items表有很多行。 我避免将所有项目加载到内存中,而是仅加载当前在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
    }

    // ...
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM