【问题标题】:Swift, unable to read data in urlSwift,无法读取 url 中的数据
【发布时间】:2015-10-14 18:23:15
【问题描述】:

我运行了这个,当我尝试发送数据时没有任何反应。所以我调试了它,它无法从 url 中读取任何内容。它说“无法读取数据”。我检查了 url 的正确性,我检查了这个服务器它的好和我的 php 代码。我只有在升级到 swift 2 或 Xcode7 时才会遇到这个问题。感谢您的帮助!

let myUrl = NSURL(string: "http://localhost/SwiftAppAndMySQL/scripts/registerUser.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";

let postString = "userEmail=\(userEmail!)&userFirstName=\(userFirstName!)&userLastName=\(userLastName!)&userPassword=\(userPassword!)";

request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);

NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

    dispatch_async(dispatch_get_main_queue())
        {

            //spinningActivity.hide(true)

            if error != nil {
                self.displayAlertMessage(error!.localizedDescription)
                return
            }

            do {
                let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary

                if let parseJSON = json {

                    let userId = parseJSON["userId"] as? String

                    if( userId != nil)
                    {
                        let myAlert = UIAlertController(title: "Alert", message: "Registration successful", preferredStyle: UIAlertControllerStyle.Alert);

                        let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default){(action) in

                            self.dismissViewControllerAnimated(true, completion: nil)
                        }

                        myAlert.addAction(okAction);
                        self.presentViewController(myAlert, animated: true, completion: nil)
                    } else {
                        let errorMessage = parseJSON["message"] as? String
                        if(errorMessage != nil)
                        {
                            self.displayAlertMessage(errorMessage!)
                        }

                    }

                }
            } catch{
                print(error)
            }    

        }

    }).resume()

【问题讨论】:

  • 寻找ATS,看ifau的回复。我认为他的回答可能对您有所帮助

标签: ios swift swift2 xcode7


【解决方案1】:

我只有在升级到 swift 2 或 Xcode7 时才会遇到这个问题。

Xcode 7 包含带有 iOS 9 的 iOS 模拟器。iOS 9 有一个新功能 - App Transport Security (ATS),它可以防止不安全的连接 (http)。更多信息:

【讨论】:

  • 是的,我摆脱了应用程序传输安全块,我不知道还有什么。
【解决方案2】:

我向你展示我使用 JSON 的示例

   let mainString = "http://api.mymemory.translated.net/get?q=\(sendWord)&langpair=\(langpair)".stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLFragmentAllowedCharacterSet())!
    Alamofire.request(.POST, mainString).responseJSON { (response) -> Void in

        let mainDictionary = response.result.value as! [String : AnyObject]
        print(mainDictionary)
        let arrayDictionary = mainDictionary["matches"] as! [AnyObject]
        let matchesDictionary = arrayDictionary[0] as! [String : AnyObject]
        let segment = matchesDictionary["segment"] as! String
        print(segment)
        let translation = matchesDictionary["translation"] as! String
        print(translation)

第二个例子

  let url = NSURL(string: "http://api.mymemory.translated.net/get?q=Hello%20World!&langpair=en%7Cit")!
  let dataData = NSData(contentsOfURL: url)!
  let main = try! NSJSONSerialization.JSONObjectWithData(dataData, options: NSJSONReadingOptions.AllowFragments)
  print(main)

【讨论】:

  • 什么是 almofire 是一种新的做法?
猜你喜欢
  • 2020-10-23
  • 2016-04-12
  • 1970-01-01
  • 2021-10-28
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2016-12-31
  • 2020-03-23
相关资源
最近更新 更多