'init(contentsOfURL :)'不可用:从iOS 7及更早版本开始使用的API在Swift中不可用

时间:2014-09-18 10:31:11

标签: ios swift

我找不到contentsOfURL的任何替代方法来解决此问题。

这是我的Swift代码:

import Foundation
import MapKit

class MapHelper{


func geoCodeUsingAddress(address:String) ->CLLocationCoordinate2D{
    var latitude = 0.0
    var longitude = 0.0
    let esc_addr = address.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
    let req = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=\(esc_addr)"

    let result:NSString? = NSString(contentsOfURL: NSURL(string: req)); // here is error //msg comes

    if let value=result{
        let scanner:NSScanner = NSScanner(string: value)
        if(scanner.scanUpToString("\"lat\" :", intoString: nil) && scanner.scanString("\"lat\" :", intoString: nil)){
            scanner.scanDouble(&latitude)
        }
        if(scanner.scanUpToString("\"lng\" :", intoString: nil) && scanner.scanString("\"lng\" :", intoString: nil)){
            scanner.scanDouble(&longitude);
        }
    }
    else{

    }

    var center:CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: 0, longitude: 0);
    center.latitude = latitude;
    center.longitude = longitude;
    return center;

}
}

3 个答案:

答案 0 :(得分:1)

试试这个

let urlPath: String = "YOUR URL HERE"
let data = NSString(contentsOfURL: urlPath, encoding: NSASCIIStringEncoding, error: nil)

答案 1 :(得分:1)

从远程服务器加载时,建议不要使用contentsOfURL:encoding:。最好使用适合此任务的NSURLConnectionNSURLSession专用方法。

最简单的方法是使用NSURLConnection类方法sendAsynchronousRequest:queue:completionHandler:。但是这种方法有一些限制 - 例如,它无法取消,身份验证仅适用于使用HTTB基本身份验证传递URL中的凭据。

有关进一步参考,请参阅"异步加载数据"在NSURLConnection Class Reference

另请参阅:Using NSURLConnection

答案 2 :(得分:0)

那是旧的contentsWithURL,后来被弃用了。您现在需要添加编码和错误。

let result = NSString(contentsOfURL: "http://www.google.com", encoding: NSASCIIStringEncoding, error: nil)