2016-03-12 155 views
0

我试图检查应用程序的启动是否连接互联网。 当我切换我的Wifi并检查应用程序周围的应用程序时,应用程序仍尝试连接到互联网10秒钟。如果用户没有连接到互联网,那么我应该显示一条警告,请连接到互联网。我不是localDataStore。 在我看来,我必须在queryForTable添加互联网检查声明。检查互联网连接queryForTable解析

func baseQuery() -> PFQuery { 
    let query = PFQuery(className: "homeClass") // Replace with the class name for the Parse data you're interested in. 
    // Just like with a regular PFQuery you can filter and sort. 
    query.orderByAscending("SNo") 
    return query 
} 


override func queryForTable() -> PFQuery { 
    if Reachability.isConnectedToNetwork() == true { 
     print("Internet connection OK") 
     tableView.reloadData() 
     self.baseQuery() 
    } else { 
     print("Internet connection FAILED") 
     let alert = UIAlertView(title: "No Internet Connection", message: "Make sure your device is connected to the internet.", delegate: nil, cancelButtonTitle: "OK") 
     alert.show() 
     let destinationVC:MainViewController = self.storyboard?.instantiateViewControllerWithIdentifier("NewView") as! MainViewController 
     navigationController?.pushViewController(destinationVC , animated: true) 

    } 

} 

更新

func baseQuery() -> PFQuery { 

    let query = PFQuery(className: "homeClass") 

    if Reachability.isConnectedToNetwork() != true { 
     print("Internet connection FAILED") 

      } else { 
      print("Internet connection OK") 
      query.orderByAscending("SNo") 
      return query 
     } 

     return PFQuery() 
    } 

    override func queryForTable() -> PFQuery { 

    return self.baseQuery() 
} 

我想此代码,它仍然试图从互联网上获取数据。

回答

0

我刚刚发现了这个程序来检查接口的IP地址,你需要添加一个桥接头来使这个工作。

虽然不是“答案”;您应该能够修改此代码以检查所有网络连接的状态。

请注意,您需要通过一个objective-c桥接头来包含这一点。

#include <ifaddrs.h> 

你应该可以从这里把它合起来!

func getIFAddresses() -> [String] { 
var addresses = [String]() 

// Get list of all interfaces on the local machine: 
var ifaddr : UnsafeMutablePointer<ifaddrs> = nil 
if getifaddrs(&ifaddr) == 0 { 

// For each interface ... 
for (var ptr = ifaddr; ptr != nil; ptr = ptr.memory.ifa_next) { 
    let flags = Int32(ptr.memory.ifa_flags) 
    var addr = ptr.memory.ifa_addr.memory 

    // Check for running IPv4, IPv6 interfaces. Skip the loopback interface. 
    if (flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING) { 
     if addr.sa_family == UInt8(AF_INET) || addr.sa_family == UInt8(AF_INET6) { 

      // Convert interface address to a human readable string: 
      var hostname = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0) 
      if (getnameinfo(&addr, socklen_t(addr.sa_len), &hostname, socklen_t(hostname.count), 
       nil, socklen_t(0), NI_NUMERICHOST) == 0) { 
        if let address = String.fromCString(hostname) { 
         addresses.append(address) 
        } 
      } 
     } 
    } 
} 
freeifaddrs(ifaddr) 
} 

return addresses 
} 
+0

这个我必须创建一个新的文件?当我运行我的代码时,执行的第一个函数是'func queryForTable() - > PFQuery' –

+0

如果你的函数依赖于网络连接,那么在运行查询之前,你需要运行这样的事情。 – user3069232

0

我在我的应用程序中使用可达性,这太棒了!每次用户点击按钮时,您都可以检查KNOTREACHABLE是否为真。可达性使用NSNotification来不断检查用户是否连接到WiFi,手机或断开连接。如果连接丢失,您甚至可以弹出标签或通知。 Reachability Link

有几个不错的YouTube视频在那里...这里是一个:

Reachability Swift YouTube Video

+0

谢谢你的回答@丹,但我想解析queryForTable(),它不工作。 –