- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 google places api 来搜索附近的地点。但是,我只想要特定类型的地方。当我只指定一种类型时,代码(如下所示)有效,但是当我添加第二个类型时,我的代码运行并立即在这一行给我一个 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) 错误:
session.dataTaskWithURL(url!, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in
我知道网址有效。我可以将它插入浏览器并看到 json,所以我不明白是什么问题。
func search(location : CLLocationCoordinate2D, radius : Int, callback : (items : [Attraction]?, errorDescription : String?) -> Void) {
var urlString = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=37.7873589,-122.408227&radius=4000&types=aquarium|art_gallery&key=YOURKEY"
var url = NSURL(string: urlString)
var session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
session.dataTaskWithURL(url!, completionHandler: { (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in
if error != nil {
callback(items: nil, errorDescription: error.localizedDescription)
}
if let statusCode = response as? NSHTTPURLResponse {
if statusCode.statusCode != 200 {
callback(items: nil, errorDescription: "Could not continue. HTTP Status Code was \(statusCode)")
}
}
NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
callback(items: GooglePlaces.parseFromData(data), errorDescription: nil)
})
}).resume()
}
class func parseFromData(data : NSData) -> [Attraction] {
var attractions = [Attraction]()
var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
var results = json["results"] as? [NSDictionary]
for result in results! {
var placeId = result["place_id"] as String
var image = result["icon"] as String
var name = result["name"] as String
var ratingString = ""
var types = result["types"] as [String]
println(types)
if result["rating"] != nil {
var rating = result["rating"] as Double
ratingString = "\(rating)"
}
var coordinate : CLLocationCoordinate2D!
if let geometry = result["geometry"] as? NSDictionary {
if let location = geometry["location"] as? NSDictionary {
var lat = location["lat"] as CLLocationDegrees
var long = location["lng"] as CLLocationDegrees
coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
var placemark = MKPlacemark(coordinate: coordinate, addressDictionary: nil)
var attraction = Attraction(id: placeId, imageUrl: "image url", locationName: name, ratingAvg: "\(ratingString)", types: types, placemarker: placemark)
attractions.append(attraction)
}
}
}
return attractions
}
最佳答案
I know the url is valid
URL 无效。你不知道你认为你知道的。听听运行时。它比你知道的更多。
只需单独尝试此代码(例如,在 Playground 上):
var urlString = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=37.7873589,-122.408227&radius=4000&types=aquarium|art_gallery&key=YOURKEY"
let url = NSURL(string:urlString)
url
为零。那是你的问题。您不能强制展开 nil
;如果你这样做,你会崩溃。
一旦您确认了这一点,您就可以开始考虑 为什么 URL 无效。 (原因很明显。)学会相信编译器和运行时是成功编程的关键。
提示:像这样形成您的 URL,一切都很好:
let url2 = NSURL(scheme: "https", host: "maps.googleapis.com", path: "/maps/api/place/nearbysearch/json?location=37.7873589,-122.408227&radius=4000&types=aquarium|art_gallery&key=YOURKEY")
为什么会这样?查看文档,看看这个初始化程序为您做了什么......
关于exception - EXC_BAD_INSTRUCTION(代码=EXC_I386_INVOP,子代码=0x0)与 dataTaskWithUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054030/
我正在尝试使用完成处理程序将数据存储在 dataTaskWithUrl 之外,以便与其他方法一起使用。 这是我的代码: import UIKit import XCPlayground XCPSetE
我正在调用 Web 服务。在该方法中,session.dataTaskWithURL 会在一段时间后调用。我认为它没有提供正确的线程? my code below ——--------------
我有以下快速代码 let urlPath="..." // dont worry, there is an actual valid URL in there let url=NSURL(strong
我最近一直在学习 Objective C,我决定尝试连接。 NSURLConnection 的一切都很好,直到我发现它已经过时,并尝试使用 NSURLSession。 我正在尝试一个非常简单的示例,但
有什么方法可以在下载数据时快速从 dataTaskWithURL 获取进度? NSURLSession.sharedSession().dataTaskWithURL(...) 我需要在下载数据时显示
我一直在尝试混合 NSURLSession 类方法 dataTaskWithRequest 但未能完成 extension NSURLSession{ public override class fu
我一直在尝试调整 NSURLSession 类的 dataTaskWithURL 方法。这是我尝试过的 + (void)swizzleDataTaskWithRequest { Class class
我的意思是“慢”,回调类型等待远程服务器超时以有效触发(调用 vimeo 提要,解析它,然后在场景中显示 uiviews) 我大多不明白它是如何工作的。我希望在返回响应后立即从回调中填充我的 View
我正在尝试从 Web 服务器加载 JSON 文件。以下是我如何启动请求: let url:NSURL? = NSURL(string: lookupUrlFragment + query) // Ch
我有以下代码: let urlPath:String = apiURL + apiVersion + url + "?api_key=" + apiKey let url = NSURL(string
我有一个dataTaskWithUrl: var headers: NSDictionary = ["X-Mashape-Key": "my-secret-key" , "Accept
假设您正在使用NSURLSession dataTaskWithURL:... self.currentConnection = [sess dataTaskWithURL:goUrl com
我有一段代码可以从 php 返回的 Json 中获取员工数据,如下所示: [{"id":"1","email":"KK","password":"KKK","firstName":"KKK","las
我是 iOS World 的新手。当我看到下载文件的方法时。我看到这段代码: // create url let imageURL = NSURL(string: Co
我正在使用 Apple 的 NSURLSession#dataTaskWithURL 方法执行一个简单的获取请求 [[mySession dataTaskWithURL:myUrl completio
我正在尝试从我的服务器下载一个 94KB 的图像文件。我尝试了两种方法来做到这一点:使用 NSURLSession dataTaskWithURL 和 NSData dataWithContentsO
我正在使用 google places api 来搜索附近的地点。但是,我只想要特定类型的地方。当我只指定一种类型时,代码(如下所示)有效,但是当我添加第二个类型时,我的代码运行并立即在这一行给我一个
我正在关注this tutorial并尝试对我的网络服务进行单元测试。该教程是 swift 2 中的,我已将其写入 swift 4 中。我已经完成了所有操作,但应用程序崩溃了,无论我是在单元测试还是运
我是一名优秀的程序员,十分优秀!