在iOS应用程序中加载HTTP失败

在iOS应用程序中加载HTTP失败,ios,iphone,swift,xcode,Ios,Iphone,Swift,Xcode,我的应用程序根本不会打印任何东西。我添加了打印语句,但没有一个打印。这也是早些时候发生的一个问题,但我忽略了。也许我做了一些HTTP请求错误,尽管我没有找到任何错误。这是我的密码 import UIKit class ViewController: UIViewController { @IBOutlet var cityName: UITextField! @IBOutlet var results: UILabel! @IBAction func searc

我的应用程序根本不会打印任何东西。我添加了打印语句,但没有一个打印。这也是早些时候发生的一个问题,但我忽略了。也许我做了一些HTTP请求错误,尽管我没有找到任何错误。这是我的密码

import UIKit

class ViewController: UIViewController {

    @IBOutlet var cityName: UITextField!

    @IBOutlet var results: UILabel!


    @IBAction func searchButton(_ sender: Any) {
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let url = URL(string: "http://www.weather-forecast.com/locations/KolKata/forecasts/latest")!
        let request = NSMutableURLRequest(url: url)
        let task = URLSession.shared.dataTask(with: request as URLRequest){
            data, response, error in

            if error != nil {
                print(error!)
            }
            else {
                if let unwrapped = data {
                    let datastring  = NSString(data: unwrapped, encoding: String.Encoding.utf8.rawValue)
                    print(datastring!)
                }
            }
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
如果出于安全考虑,我也添加info.plist文件以供参考:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
    <string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationPortraitUpsideDown</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>weather-forecast.com</key>
        <dict>
            <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSIncludeSubdomains</key>
            <true/> 
        </dict>
    </dict>
</dict>

CfBundledDevelopmentRegion
$(开发语言)
Cbundlexecutable
$(可执行文件名称)
CbundleIdentifier
$(产品\捆绑包\标识符)
CbundleInfo字典版本
6
CFBundleName
$(产品名称)
CbundlePackageType
应用
CbundleShortVersionString
1
循环流化床锅炉
1.
LSREQUIRESPHONEOS
UILaunchStoryboardName
发射屏
UIMainstryBoardFile
主要
UIRequiredDeviceCapabilities
armv7
UI支持接口方向
UIInterfaceOrientationPortrait
UIInterface方向和左视图
UIInterfaceOrientationAndscapeRight
UI支持界面方向~ipad
UIInterfaceOrientationPortrait
UIInterfaceOrientation上下方向图
UIInterface方向和左视图
UIInterfaceOrientationAndscapeRight
NSAppTransportSecurity
NSExceptionDomains
天气预报网
NSTemporary ExceptionalLowsInSecureHttpLoads
n包括子域

问题不在于info.plist,您需要编写
task.resume()
。停止使用强制展开也

 guard let url = URL(string: "http://www.weather-forecast.com/locations/KolKata/forecasts/latest") else {return}
    let request = NSMutableURLRequest(url: url)
    let task = URLSession.shared.dataTask(with: request as URLRequest){
        data, response, error in

        if error != nil {
            print(error!)
        }
        else {
            if let unwrapped = data {
                if let datastring  = NSString(data: unwrapped, encoding: String.Encoding.utf8.rawValue){
                    print(datastring)
                }
            }
        }
    }
    task.resume()
}

问题不在于info.plist,您需要编写
task.resume()
。停止使用强制展开也

 guard let url = URL(string: "http://www.weather-forecast.com/locations/KolKata/forecasts/latest") else {return}
    let request = NSMutableURLRequest(url: url)
    let task = URLSession.shared.dataTask(with: request as URLRequest){
        data, response, error in

        if error != nil {
            print(error!)
        }
        else {
            if let unwrapped = data {
                if let datastring  = NSString(data: unwrapped, encoding: String.Encoding.utf8.rawValue){
                    print(datastring)
                }
            }
        }
    }
    task.resume()
}

你能显示你的错误吗?我想你忘了在NSAppTransportSecurity中添加一个键值,缺少的键值是NSAllowsArbitraryLoads@Malleswari绝对没有输出。这就是问题所在。你能显示你的错误吗?我想你忘了在NSAppTransportSecurity中添加一个键值,缺少的键值是NSAllowsArbitraryLoads@Malleswari绝对没有输出。这就是问题所在,我想这就是答案,
task.resume()
将完成工作我想这就是答案,
task.resume()
将完成工作