Ich ziehe derzeit Daten über Twitter Search API.Wie JSON-Daten ordnungsgemäß analysiert werden, wenn einige Daten NSNull sind
Sobald ich die Daten erhalte, versuche ich die Daten zu analysieren und in meine TweetDetails-Klasse zu speichern (die den Namen des Autors, die URL des Profilbilds, den Text des Tweets und den Ort des Tweets enthält) , die Tweet-ID und die Benutzer-ID).
In einigen Fällen haben die Tweets keinen Speicherort (ich denke, es hat etwas zu tun, wenn sie retweeted sind) und das bestimmte Wörterbuch (hier tweetsDict ["place"]), die sonst diese Informationen enthalten würde , gibt stattdessen NSNull zurück.
Bei diesen Gelegenheiten, erhalte ich diese Störung
nicht Wert vom Typ werfen kann 'NSNull' (0x1093a1600) auf 'NSDictionary' (0x1093a0fe8).
Hier ist mein Code wie ich versuche, um die Daten zu analysieren und sie zu Objekten in meiner TweetDetails Klasse speichern
client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in
if connectionError != nil {
print("Error: \(connectionError)")
}
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: [])
if let tweets = json["statuses"] as? [NSDictionary] {
for tweetsDict in tweets {
let text = tweetsDict["text"] as! String
let tweetID = tweetsDict["id_str"] as! String
let place = tweetsDict["place"] as! NSDictionary
// this line ^^ is where the error occurs
let city = place.valueForKey("full_name")
let user = tweetsDict["user"] as! NSDictionary
let userID = user.valueForKey("id_str")
let screenName = user.valueForKey("screen_name")!
let avatarImage = user.valueForKey("profile_image_url_https")!
let tweet = TweetDetails(authors: screenName as! String, profileImages: avatarImage as! String, tweetTexts: text, tweetLocations: city as! String , tweetIDs: tweetID , userIDs: userID as! String)
self.allTweets.append(tweet)
self.tweetTableView.reloadData()
}
}
} catch let jsonError as NSError {
print("json error: \(jsonError.localizedDescription)")
}
}
habe ich versucht, einige ‚if-let‘ Aussagen zu erstellen Alternativen zu bieten diese Anlässe, aber nichts hat funktioniert.
Könnte mir bitte jemand helfen, eine benutzerdefinierte Alternative zu erstellen, wenn bestimmte JSON-Daten als NSNull zurückgegeben werden. (Sogar etwas so einfaches wie das Umdrehen meiner "city" -Variable in die Zeichenfolge "Unbekannter Ort" in den Fällen, in denen die Daten NSNull zurückgeben).
Vielen Dank im Voraus und bitte lassen Sie mich wissen, wenn es noch etwas gibt, was ich hinzufügen kann, um mehr Klarheit zu dieser Frage zu geben.
Kurz gesagt, verwenden Sie niemals das erzwungene Casting von 'as!', Es sei denn, Sie wissen, dass der Wert niemals 'nil' sein kann. Wenn ein Verbindungsfehler vorliegt, stürzt dieser Code ab (weil 'data' möglicherweise" nil "ist und Sie eine erzwungene Entpackung durchführen). Vielleicht fügen Sie in dieser Klausel eine 'return'-Anweisung ein, in der Sie die Fehlermeldung ausgeben (oder' guard' verwenden), so dass Sie im Falle eines Fehlers nicht 'JSONObjectWithData' mit' data! 'Ausführen. – Rob