连接到SQLite数据库失败时iOS显示错误

时间:2016-10-19 05:04:45

标签: ios swift sqlite appdelegate sqlite.swift

当我的iOS应用程序启动时,我想使用SQLite.swift连接到本地SQLite数据库,然后向用户显示存储在数据库中的项目列表。建立数据库连接可以throw。如果连接失败,那么我想向用户显示一条很好的错误消息。

Main.storyboard中,我的根视图控制器是UINavigationController。导航控制器的根/顶视图控制器是UIViewController,其中包含UITableView以显示数据库中的项目。

我的第一个想法是连接到AppDelegate的{​​{1}}中的数据库,并以某种方式在application(_:didFinishLaunchingWithOptions:)上显示UIAlertController。我似乎无法让UIViewController呈现UIViewController。即使我可以,我也开始怀疑这种方法,因为如果无法从数据库加载项目,那么表格无法在警报下呈现。我正在努力的是这样的事情:

UIAlertController

我的第二个想法仍然是连接到func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { do { let documentsDirectories = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) let documentsDirectory = documentsDirectories.first! let dbPath = documentsDirectory.appendingPathComponent("db.sqlite3") let db = try Connection("\(dbPath)") // ... } catch { let navController = window!.rootViewController as! UINavigationController let itemsController = navController.topViewController as! ItemsController let failureAlert = UIAlertController( title: "Fatal Error", message: "Could not connect to the database.", preferredStyle: .alert) itemsController.present(failureAlert, animated: true, completion: nil) } //... } 的{​​{1}}中的数据库。如果抛出,则将窗口的根视图更改为用户将看到的错误视图。这样,显示项目的表将永远不会尝试显示项目。

我的第三个想法是让AppDelegate变得更加懒惰并将问题解决。只需创建一个知道SQLite数据库文件路径的数据访问对象。将dao传递给充当application(_:didFinishLaunchingWithOptions:)数据源的AppDelegate。当数据源第一次需要来自数据库的信息时,让dao尝试连接(并在必要时迁移数据库模式等)并在那时让它UIViewController。即使dao已经连接到数据库,UITableView在访问数据时也可能需要为throw做好准备。

您可以分享哪些优雅的处理经验?

谢谢!

0 个答案:

没有答案