2015-09-28 2 views
1

Я пишу функцию, которая проверяет, подключено ли устройство пользователя к Интернету. Если он не предупреждает пользователей с полем «Предупреждение».Проверьте, доступно ли подключение к Интернету

Первоначально я использовал следующие ниже которой работал отлично:

var data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: &response) as NSData? 

Но это было устаревшим прошивкой 9.

Так что я изменил код к следующему.

import Foundation 
import SystemConfiguration 

public class Reachability { 

class func isConnectedToNetwork()->Bool{ 

    var Status:Bool = false 
    let url = NSURL(string: "https://google.com/") 
    var response: NSURLResponse? 
    let request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "HEAD" 
    request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalAndRemoteCacheData 
    request.timeoutInterval = 10.0 

    let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil) 

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, err -> Void in 

     if let httpResponse = response as? NSHTTPURLResponse { 
      if httpResponse.statusCode == 200 { 
       Status = true 
      } 
     } 
    }) 

    task.resume() 
    return Status 
}} 

Вопрос заключается в том, что он всегда говорит, что нет никакой связи Интернет, который, очевидно, неправильно. Это означает, что «Bool» всегда ложный. Что я делаю не так?

Заранее спасибо.

+0

См. следующий ответ. http://stackoverflow.com/a/30743763/1180206 – Imran

+0

@ Paulw11 Благодарим за внимание. Любые предложения по устранению этого? – Skywalker

ответ

3

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

Однако, чтобы ответить на ваш вопрос, потому, что это всегда возвращает false является то, что задача данных асинхронно - то есть она будет завершена независимо от вызова функции, так что к тому времени он завершает и пытается установить статус true , эта функция уже возвращена false

2

Рекомендуемый способ - отправить запрос, который вы действительно хотите отправить, и определить, будет ли он успешным или неудачным, и если он не работает, определить, почему он не работает. Невозможно обнаружить достоверно, есть ли соединение или нет.

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

  • Нет связанных вопросов^_^