Für 12 Stunden habe ich 18 mal abgestürzte Berichte über eine HTTPRequest-Methode erhalten.iOS App stürzt manchmal ab, wenn HTTPRequest (JSON) verarbeitet wird
Diese Methode wird verwendet, um Songinformationen vom Server zu laden, z. B. Liedtitel, Interpret.
Die Absturzberichte von Fabric.io kommen, aber ich kann es nicht sehr gut untersteht, ist es eine Art von etwa NSOperation und Faden ....
Meine Frage ist, was zum Absturz bringen tat? und wie kann ich diese Funktion verbessern loadMetadata()
?
Dies ist ein Screenshot von Crash-Bericht, warum ist bei Linie 0?
Dies sind der Code des Httprequest die bekommen JSON-Daten vom Server
func loadMetadata() {
if self.hasConnectivity() {
let url = NSURL(string: "http://sites.exampleserver.de/files/playlist/streamdaten_json.txt")
let request = NSMutableURLRequest(URL:url!)
let sessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
sessionConfiguration.requestCachePolicy = .ReloadIgnoringLocalCacheData
let session = NSURLSession(configuration: sessionConfiguration, delegate: nil, delegateQueue: nil)
session.dataTaskWithRequest(request) { (data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments) as? NSDictionary
print(json)
var title : String
var interpret : String
switch (self.channels.channel) {
case 0:
title = json?.objectForKey("Titel_Live") as! String
interpret = json?.objectForKey("Interpret_Live") as! String
case 1:
title = json?.objectForKey("Titel_InTheMix") as! String
interpret = json?.objectForKey("Interpret_InTheMix") as! String
default:
title = ""
interpret = ""
}
if self.lastTitle != title || self.lastInterpret != interpret || self.lastChannel != self.channels.channel {
if title.lengthWithoutWhitespace() < 1 && interpret.lengthWithoutWhitespace() < 1 {
self.songTitle = self.channels.currentDefaultArtist
self.albumTitle = self.channels.currentDefaultTitle
} else {
if self.lastTitle != title { // title has changed
self.albumTitle = title.lengthWithoutWhitespace() > 1 ? title : self.channels.currentDefaultArtist
}
if self.lastInterpret != interpret || self.lastChannel != self.channels.channel { // interpret has changed
self.songTitle = interpret.lengthWithoutWhitespace() > 1 ? interpret : self.channels.currentDefaultArtist
}
}
}
self.lastTitle = title
self.lastInterpret = interpret
self.lastChannel = self.channels.channel
// Test currentInfo
self.metaDataHandler.setInfo(artist: self.songTitle, title: self.albumTitle)
}catch {
print("Error with Json: \(error)")
}
}
}.resume()
}
}
Vielen Dank! Ich habe wieder etwas über Optional gelernt und jetzt verstanden, wo das Problem liegt. – shilei365