2016-07-08 1 views
1

Это мой код, объяснение ниже:Загрузите локальный файл, если нет подключения к Интернету; функция вызывает себя снова и снова

func webViewDidStartLoad(homewebview: UIWebView) { 

    if Reachability.isConnectedToNetwork() == true { 
     print("Internet connection: OK") 

    } else { 
     print("Internet connection: FAILED") 

     let path: String = NSBundle.mainBundle().pathForResource("file", ofType: "html")! 
     let url: NSURL = NSURL.fileURLWithPath(path) 
     let request: NSURLRequest = NSURLRequest(URL: url) 
     homewebview.loadRequest(request) 
    } 
} 

При нажатии на гиперссылку webViewDidStartLoad будет вызвана.

При подключении к Интернету он печатает Internet connection: OK.

Если нет подключения к интернету, он должен распечатать Internet connection: FAILED и открыть file.html.

Но при открытии локального файла он снова вызывает целую функцию, и снова и снова ... как бесконечный цикл.

Я хочу проверить подключение к Интернету, нажав (гипер) ссылку в WebView. Если нет подключения к Интернету, локальный файл должен загружаться в этом WebView, не вызывая функцию снова.

Как это исправить? У кого-нибудь есть идея?

+0

Загрузка локального файла по-прежнему вызывает метод делегирования, поэтому вы видите, что у вас нет сетевого подключения при попытке загрузить локальный файл, а затем просто попробуйте загрузить его снова. – dan

+0

Просто заметил это сам. Как я могу это исправить? –

+0

Не следует ли добавлять новую розетку: '@IBOutlet var checkInternetConnection: UIWebView!', А затем 'checkInternetConnection.loadRequest (request)'? –

ответ

1

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

var loadingLoacalPage = false 
//..// 
func webViewDidStartLoad(homewebview: UIWebView) { 
     if Reachability.isConnectedToNetwork() == true { 
      print("Internet connection: OK") 

     } else { 
      print("Internet connection: FAILED") 

      let alert = UIAlertView(title: "No internet connection", message: "Check internet connection.", delegate: nil, cancelButtonTitle: "Okay") 
      alert.show() 

      if(!loadingLoacalPage){ 

      let path: String = NSBundle.mainBundle().pathForResource("file", ofType: "html")! 
      let url: NSURL = NSURL.fileURLWithPath(path) 
      let request: NSURLRequest = NSURLRequest(URL: url) 
      homewebview.loadRequest(request) 

      loadingLoacalPage = true 

     } 
    } 
} 
+0

Привет, спасибо за ваш ответ. Кажется, работает. Большое спасибо. Я сделал небольшое изменение в вашем коде. Пожалуйста, подтвердите это. –

+0

Я одобрил внесенное вами изменение. Добро пожаловать :) – Coyote

+0

Спасибо, и спасибо за вашу помощь. Действительно умное и простое решение. –

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