2016-10-22 4 views
0

В моем приложении iOS у меня есть база данных SQLite с таблицей items, которая имеет много строк. Я избегаю загрузки всех элементов в память и вместо этого загружаю только те, которые в настоящее время отображаются в UITableView.Что делать, если ошибка в таблицеView (_: 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, то вы можете иметь переменную состояния на контроллере представления и имеют различные состояния, как .loading, .showing, .empty, .error. Для любого состояния, отличного от .showing, вы будете возвращать 0 для количества строк и вместо этого отображать DZNEmptyDataSet. Например, если ваши данные не загружаются, вы устанавливаете состояние в .error и вызываете tableView.reloadData(), который вызывает методы emptySetDatasource, где вы можете указать сообщение об ошибке. Если у вас есть элемент управления обновлением, пользователь может потянуть, чтобы обновить его, и вы вернете состояние для загрузки и повторите попытку. Это то, как представления таблиц, поддерживаемые данными REST, работают в большинстве популярных приложений.

Смежные вопросы