Отмена загрузки контроллера представления, если не удается загрузить URL - Swift 4 - PullRequest
0 голосов
/ 16 марта 2019

Когда загружается контроллер представления, он должен получить файл JSON через URL. Если интернет не работает, я хотел бы отменить загрузку контроллера представления. Здесь приведен код, и я знаю, что он неверен, но он дает вам представление о том, что мне нужно делать. В общем, я должен использовать переопределение, отличное от viewDidLoad (), так как он "загрузился"?

 override func viewDidLoad() {

        var jsonText = ""
        if let url = URL(string: "http://thedomain.com/eventlistjson_r2.asp") {
            do {
                jsonText = try String( contentsOf: url,encoding: .utf8)
            } catch {
                // contents could not be loaded
                print(error)
                super.dismiss(animated: true)
            }
        } else {
            // the URL was bad!
            print("the URL was bad")
        }
}

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Если ваш контроллер представления не имеет смысла без данных, возможно, вам следует сначала попытаться найти данные, а затем решить, следует ли нажимать / представлять UIViewController или нет.В этом случае тот, кто создает экземпляр контроллера представления, сначала пытается извлечь JSON, и только в случае успешного создания экземпляра и передачи данных в упомянутый контроллер представления.

Второй вариант заключается в том, что ваш контроллер представления проверяет сами данные и в случаеничего не найдено, предоставьте пользователю информацию, прежде чем уволиться.Вы можете достичь этого путем:

  1. Отображение информации непосредственно в вашем контроллере представления (тогда для этого подойдет viewDidLoad()) и предоставление пользователю возможности вернуться назад, нажав кнопку назад.
  2. Представление UIAlertController, в котором ваш контроллер представления будет отключаться при нажатии кнопки подтверждения оповещения.

В любом случае, загрузка и отключение контроллера представления без обратной связи поднимает флаг плохого UX или дизайна.

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

0 голосов
/ 16 марта 2019

Это

jsonText = try String( contentsOf: url,encoding: .utf8)

блокирует основной поток, поэтому, когда пользователь нажимает кнопку на vc, которая нажимает на этот vc, пользователю будет казаться, что приложение не работает, что вы должны сделать, находясь внутри этого mainVC

// add loading 
// make the call in a background thread such as URLSession.shared or Alamofire
// then decide inside the callback whether to proceed with push/segue or stay in that mainVC

дополнительно увольнение с

self.dismiss(animated: true) // not super 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...