Swift:Web Service API调用在某些网络上返回错误

时间:2015-12-01 00:18:43

标签: ios json swift nsurl

我正在使用Swift创建一个iOS应用程序,它使用一些Web服务来获取一些信息。具体来说,我使用food2fork API来获取一些食谱。我遇到的问题是,如果我在大学连接到互联网,网络电话将始终返回错误,即使我知道我已通过电话连接到互联网。我认为这个错误与网络如何处理安全网站有关,但我不确定。

我没有正确使用NSURL吗?有没有更好的方法来确保我的网络电话始终返回应用所需的数据?这是功能:

func getRecipeByID(recipeId: String, sendTo: RecipeInfoViewController)
{
    let theURLAsString = "http://food2fork.com/api/get?key=[MY KEY]&rId=" + recipeId
    let theURL = NSURL(string: theURLAsString)
    let theURLSession = NSURLSession.sharedSession()

    let theJSONQuery = theURLSession.dataTaskWithURL(theURL!, completionHandler: {data, response, error -> Void in

        if(error != nil)
        {
            print(error!)
        }

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

           if theJSONResult.count > 0
            {
                let theRecipeDictionary = theJSONResult["recipe"] as? NSDictionary
                sendTo.setRecipeInfo(theRecipeDictionary!)
            }
        } catch let error as NSError {
            print(error) //The function always gets here on certain networks
        }
    })
    theJSONQuery.resume()
}

打印(错误)行输出的错误是:

  

错误域= NSCocoaErrorDomain代码= 3840“JSON文本未启动   使用数组或对象以及允许未设置片段的选项。“   UserInfo = {NSDebugDescription = JSON文本不是以数组或   允许片段未设置的对象和选项。}

1 个答案:

答案 0 :(得分:0)

如果您正在运行iOS 9,则需要通过向Info.plist添加密钥来禁用该域的App Transport Security。否则,您将无法建立非HTTPS连接。