2016-10-22 6 views
0

私のiOSアプリケーションでは、多くの行を持つitemsテーブルを持つSQLiteデータベースがあります。私はすべての項目をメモリにロードするのを避けて、現在はUITableViewに表示されているものだけをロードします。tableView(_:numberOfRowsInSection :)でエラーがスローされたらどうすればいいですか?

私は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 
    } 

    // ... 
} 

答えて

0

あなたは、あなたがあなたのビューコントローラ上の状態変数を持つことができますDZNEmptyDataSetのようなものを使用して、.empty、.ERRORを.showing、.loadingのように、異なる状態を持っている場合。 .showing以外の状態では、行数に0を返し、代わりにDZNEmptyDataSetを表示させます。たとえば、データのロードに失敗した場合は、状態を.errorに設定し、エラーメッセージを指定できるemptySetDatasourceメソッドを呼び出すtableView.reloadData()を呼び出します。あなたがリフレッシュコントロールを持っているならば、ユーザーはリフレッシュするために引っ張ることができ、あなたはその状態を.loadingに戻して、やり直してください。これは、RESTデータを基にしたテーブルビューが最も人気のあるアプリケーションで動作する方法です。

関連する問題