現在、Twitterの検索APIを使用してデータを取得しています。一部のデータがNSNullの場合、JSONデータを正しく解析する方法
データを受け取ったら、私のTweetDetailsクラス(著者の名前、プロフィールのURL、ツイートのテキスト、ツイートの場所を保持するためのデータ)を解析して保存しようとしています、ツイートIDとユーザーID)。
場合によっては、ツイートには場所がありません(リッツウィジェットであれば何かしていると思います)。それ以外の場合はtweetsDict ["place"] NSNullを返します。これらの機会に
、私はこのエラー
は、型の値をキャストすることができませんでした受信 'nsnullを'(0x1093a1600) 'NSDictionaryの'(0x1093a0fe8)には。ここで
私は私のTweetDetailsクラス内のデータを解析してオブジェクトに保存し
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)")
}
}
をしようとしていますように私はのための選択肢を提供するために、いくつかの「IF-レッツ文を作成しようとした私のコードですこれらの機会は、しかし何も働いていない。
特定のJSONデータがNSNullとして返されたときに、別の方法でカスタム代替案を作成してもらえますか? (データがNSNullを返す場合は、「都市」変数を文字列「Unknown Location」に変換するだけの簡単なことです)。
ご質問ありがとうございます。この質問をより明確にするために追加できるものがある場合は、お知らせください。
要するに、値が 'nil'にならないことが分かっていない限り、' as! 'の強制的なキャストは絶対に使用しないでください。また、接続エラーが発生した場合、このコードはクラッシュします( 'data'は' nil 'なので、強制アンラッピングを実行するため)。おそらく、エラーメッセージが表示される(または 'guard'を使用する)節に' return'ステートメントを挿入してください。エラーがあった場合、 'data! 'を使って' JSONObjectWithData'を実行しないでください。 – Rob