2016-10-10 3 views
0

は、これは私のモデルは、各ヘッダが(例えば2016年10月10日のために)正確な日付を表すのtableViewで提示された実験の保存されたタイムスタンプに基づいて毎日の関連データを取得するためにrealm dbを照会する方法はありますか?

class Run: Object { 
    dynamic var duration:Double = 0 
    dynamic var elevation:Double = 0.0 
    dynamic var distance:Double = 0.0 
    dynamic var filePathString:String = "" 
    dynamic var exported:Bool = false 
    dynamic var timestamp:Date = Date() 
    let locations = List<Location>() 

} 

リスト、どのように見えるかです。

realmクエリを構築して、毎日関連する実行を取得することは可能ですか?

明確にするために、私は、レルムのクエリを使用して、この

let isSameDay = Calendar.current.isDate(date1, inSameDayAs: date2) 

ような何かを達成したいです。

+0

あなただけの日付/時間の範囲のレコードを望んでいますか?すなわち、 'date1> = date2とdate1 Michael

答えて

2

Realmを使用すると、AppleのNSPredicateフォーマットを使用してクエリを実行できます。この特定のケースでは、BETWEEN構文を使用して、特定の時間スライス内の日付、具体的には1日の開始を表すタイムスタンプと終了時刻の間をチェックすることができます。

let calendar = NSCalendar(identifier: NSCalendarIdentifierGregorian) 

let components = NSDateComponents() 
components.year = 2016 
components.month = 10 
components.day = 10 
components.hour = 0 
components.minute = 0 
components.second = 0 

// Get the start date 
let startDate = calendar?.dateFromComponents(components) 

// Get the end date 
components.day = 11 
let endDate = calendar?.dateFromComponents(components) 

// Query for the runs between these two dates 
let runDates = realm.objects(Run.self).filter("timestamp BETWEEN {%@, %@}", startDate, endDate) 

http://nshipster.com/nsdatecomponents/から盗まNSDateComponentsコード)

+0

「無効な値」が返される理由:「NSArrayオブジェクトはBETWEEN操作の日付型でなければならない」 – DCDC

+0

ええと、Realmソースコード(https://github.com/realm/realm-cocoa/blob/)を見てください。 master/Realm/RLMQueryUtil.mm#L581)、あなたの 'startDate'と' endDate'の値は両方とも 'NSDate'オブジェクトではありません。両方が正しく生成されていることを再度確認できますか? – TiM

+0

それが働いた、それは私のせいだった。あなたの助けに感謝:) – DCDC

関連する問題