EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) mit dataTaskWithUrl
Ich bin mit der google places api für die Suche nach Orten in der Nähe. Jedoch, ich will nur Orte, die von bestimmten Arten. Der code (unten zu sehen) funktioniert, wenn ich geben Sie nur eine Art, aber wenn ich eine Sekunde meinen code ausgeführt und prompt geben Sie mir eine EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) error in dieser Zeile:
session.dataTaskWithURL(url!, completionHandler: { (data : NSData!, response : NSURLResponse!, error : NSError!) -> Void in
Weiß ich die url gültig ist. Kann ich stecken Sie es in den browser und sehen Sie die json -, so verstehe ich nicht, was das problem ist.
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
}
Haben Sie überprüft, ob
Du bist genau richtig, aber ich kann nicht herausfinden, warum das passiert. Wenn ich meine plug-url in den browser zeigt er mir die json-es sollte reagiert werden.
Wirklich, @TheRadHatter? Schauen Sie, dass der URL-string. Betrachten Sie es sorgfältig. Sie sehen nicht das problem?
var url = NSURL(string: urlString)
zurück nil
oder nicht?Du bist genau richtig, aber ich kann nicht herausfinden, warum das passiert. Wenn ich meine plug-url in den browser zeigt er mir die json-es sollte reagiert werden.
Wirklich, @TheRadHatter? Schauen Sie, dass der URL-string. Betrachten Sie es sorgfältig. Sie sehen nicht das problem?
InformationsquelleAutor | 2015-01-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die URL ist nicht gültig. Sie nicht wissen, was Sie denken, Sie wissen. Hören Sie die Laufzeit. Er weiß mehr, als Sie tun.
Nur versuchen, diesen code allein (auf einem Spielplatz zum Beispiel):
url
ist null. Und das ist Ihr problem. Kann man nicht erzwingen-unwrapnil
; Sie wird Abstürzen, wenn Sie tun.Sobald Sie erkennen, können Sie anfangen zu denken über warum die URL ist nicht gültig. (Es ist ziemlich offensichtlich, warum das sein könnte.) Lernen zu glauben, der compiler und die Laufzeitumgebung ist Schlüssel zur erfolgreichen Programmierung.
HINWEIS: Form Ihrer URL wie dieser und alles ist gut:
Warum glaubst du, dass ist? Schauen Sie die Dokumentation und sehen Sie, was dieser Initialisierer für Sie tut...
Down-vote für den trickle-Erklärung, anstelle der vollständigen klare Erklärung
Das ist Ihr Privileg!
Ich Stimme mit @BradThomas. Ich kann den Wunsch verstehen, haben OP-finden Sie selbst die Antwort-das wird ihm helfen, besser zu verstehen, Dinge aus einer grundsätzlicheren Ebene. Aber letztlich fühle ich mich StackOverflow ist für die Beantwortung von Fragen, keine Tips geben, helfen, die person zu Fragen, die Antwort zu finden.
Ich habe auch abgestimmt für die unklare Erklärung. Wenn Sie möchten, um es zu erklären, so schreiben Sie bitte ein tutorial auf einem blog und link.
InformationsquelleAutor matt
Ich würde
.stringByAddingPercentEscapesUsingEncoding()
Gibt:
http://example.com/?foo=bar%7Cbaz
InformationsquelleAutor Devran Cosmo Uenal