2016-11-10 7 views
0

私はiPhoneを持っていないので携帯データはありませんが、WiFi対応です。私はSafariにアクセスすることができます、スラックなど問題なし。私は、JSONパッケージをサーバーに送信しようとしているアプリケーションを作成しており、サーバーの応答を待っています。しかし、私が作っているアプリはインターネットに触れていないようだ。 (google.comは一例URLです)iOSアプリケーションからサーバーに情報を送信する方法を教えてください。

func isInternetAvailable() -> Bool 
{ 
    var zeroAddress = sockaddr_in() 
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress)) 
    zeroAddress.sin_family = sa_family_t(AF_INET) 

    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) { 
     $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in 
      SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress) 
     } 
    } 

    var flags = SCNetworkReachabilityFlags() 
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) { 
     return false 
    } 
    let isReachable = (flags.rawValue & UInt32(kSCNetworkFlagsReachable)) != 0 
    let needsConnection = (flags.rawValue & UInt32(kSCNetworkFlagsConnectionRequired)) != 0 
    return (isReachable && !needsConnection) 
} 

このコードはfalseを返しますが:

func checkInternet(flag:Bool, completionHandler:@escaping (_ internet:Bool) -> Void) 
{ 
    UIApplication.shared.isNetworkActivityIndicatorVisible = true 

    let url = NSURL(string: "http://www.google.com/") 
    let request = NSMutableURLRequest(url: url! as URL) 

    request.httpMethod = "POST" 
    request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringLocalAndRemoteCacheData 
    request.timeoutInterval = 10.0 

    NSURLConnection.sendAsynchronousRequest(request as URLRequest, queue:OperationQueue.main, completionHandler: 
     {(response: URLResponse?, data: Data?, error: Error?) -> Void in 

      UIApplication.shared.isNetworkActivityIndicatorVisible = false 

      let rsp = response as! HTTPURLResponse? 
      self.OutputTextField.text = self.OutputTextField.text + ", \(rsp)" 

      completionHandler(rsp?.statusCode == 200) 
    } as! (URLResponse?, Data?, Error?) -> Void) 
} 

私はJSONを送信するために多くの方法を試してみました。このコードは、trueを返します

ほとんどの場合、アプリをクラッシュさせたり、応答を与えたりしないでください。私は、インターネット接続に関してアプリケーションが何をしているのかを実証するために、このコードを書いています。 Info.plistを変更して、任意の負荷を許可し、WiFiを使用するようにしました。これを動作させるための何かが役に立つでしょう。

+0

http URLまたはhttps URLを使用していますか? – Windindi

+0

私はhttpを使用していますが、私はinfo.plistに例外を追加しました – Michael

答えて

0

私は間違ったことがいくつかありました。最初は、バックグラウンドスレッドでUIを更新してクラッシュを引き起こしていました。サーバー接続に関連して、info.plistを右クリックしてXML文書として編集し、そのようにサイト例外を追加します。

関連する問題