2016-07-24 7 views
2

フェッチ要求が返されている辞書があります。この辞書は、[String: NSDate]の日付の配列に作成されます。この辞書の値は[:]です。私はそれを取り除くために何もできません。私はすべてのことを試して二泊を過ごしたので誰も助けることができます。Swift:辞書、ゼロでないキーと値を削除します。

let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]] 
    print("results \(results)")  
    dates = results.map { $0["savedTime"]! as NSDate } 

これが原因

印刷結果が

[[ "savedTime" であるnilをsavedTimeキーがあることに失敗しました:2016年7月19日23時00分00秒0000] 、[:]]

+0

はい私は知っています。申し訳ありません、辞書の[:]フォームを削除する方法を尋ねることを忘れました。 – SashaZ

答えて

3

この構成体$0["savedTime"]!は間違っています。オブジェクトの上に!を置くことは、オブジェクトが常に存在することを知っていることを意味しますが、常にそこにあるとは限りません。あなたはコンパイラに横たわっているので、クラッシュしています。 !を削除してみます。

また、上記の行の値がNSDatesであることをコンパイラにすでに通知しているので、as NSDateを入れることは不要です。最後に、すべての辞書が正しいキーを持っているわけではないので、それを削除する必要があります。これを行うにはいくつかの方法があります.1つはnilsを除外することです。もう一つはflatMapを使用して、同時にnilsを変換してフィルタリングすることです。

次に、以下のようになります。

let results = try managedObjectContext.executeFetchRequest(fetchRequest) as! [[String:NSDate]] 
print("results \(results)") 
dates = results.flatMap { $0["savedTime"] } 

私はそれをコンパイルし、実行されますが、あなたが本当に必要なものではないかもしれません、でも、上記のようかかわらず心配です。辞書の配列は、managedObjectContextから抜け出すのはちょっと奇妙なことです...

+0

ありがとうございました。私はテーブルビューなどのためにManagedObjectContextを使用しましたが、平均値を取得するための値の配列を取得するために、私は辞書に遭遇しました。 – SashaZ

関連する問題