Обработка сетевых ошибок в сочетании с привязкой к tableView (Moya, RxSwift, RxCocoa)

В настоящее время я использую Мойя, чтобы сделать мои сетевые запросы. Я реализовал следующее из одного из примеров проектов @https://github.com/DroidsOnRoids/RxSwiftExamples#tutorials

Ниже я настроил restaurantSearch, чтобы при вводе текста он делал новый запрос.

var restaurantSearch: Observable<(String)> {
    return searchBar
        .rx_text
        .throttle(0.5, scheduler: MainScheduler.instance)
        .distinctUntilChanged()
}

У меня есть метод, который возвращает наблюдаемую типа [Ресторан]

func restaurants() -> Observable<[Restaurant]> {
    return restaurantSearch
        .observeOn(MainScheduler.instance)
        .flatMapLatest { postcode -> Observable<[Restaurant]?> in
            return self.getRestaurants(postcode, cuisine: "", restaurantName: "")
        }.replaceNilWith([])
}

internal func getRestaurants(postcode: String, cuisine: String, restaurantName: String) -> Observable<[Restaurant]?> {
    return self.justEatProvider
        .request(.Restaurant(postcode, cuisine, restaurantName))
        .debug()
        .mapArrayOptional(Restaurant.self, keyPath: "Restaurants")
}

Я вызываю этот метод и привязываю его к tableView следующим образом:

func setupRx() {

    api = JustEatApi(provider: provider, restaurantSearch: restaurantSearch)

    api
        .restaurants()
        .bindTo(tableView.rx_itemsWithCellIdentifier("RestaurantTableViewCell", cellType: RestaurantTableViewCell.self)) { (row, element, cell) in
            cell.restaurant = element
        }
        .addDisposableTo(disposeBag)
}

Это работает нормально. Если я ввожу почтовый индекс, он выполняет поиск и заполняется tableView.

Если я выключу интернет и попытаюсь изменить почтовый индекс, tableView останется без изменений. Тем не менее, когда я прокручиваю, он вылетает из моего приложения:

@noreturn func rxFatalError(lastMessage: String) {
    // The temptation to comment this line is great, but please don't, it's for your own good. The choice is yours.
    fatalError(lastMessage)
}

Также, если я не прокручиваю, а просто возвращаюсь в интернет и меняю почтовый индекс, ничего не происходит. Кажется, что он потерял связь.

Сначала я попытался добавить catchOnError передbindTo вызов метода, но я прочитал здесь в комментарии, что он не должен обрабатываться как часть UIBinding:http://blog.scottlogic.com/2014/05/11/reactivecocoa-tableview-binding.html

Я предполагаю, что я должен обработать это в методе:

func restaurants() -> Observable<[Restaurant]> {
    return restaurantSearch
        .observeOn(MainScheduler.instance)
        .flatMapLatest { postcode -> Observable<[Restaurant]?> in
            return self.getRestaurants(postcode, cuisine: "", restaurantName: "")
        }.replaceNilWith([])
}

Итак, у меня есть 2 вопроса:

1) Где и как я должен обработать сетевую ошибку?

2) Почему tableView не обновляется после того, как я возвращаюсь в интернет?

Любая помощь высоко ценится.

Ответы на вопрос(2)

Ваш ответ на вопрос