我保存了實體併爲它們提供了一個名爲「date」的屬性。我的目標是獲取特定時間的對象。由於Date(NSDate)對象是特定時刻,我不得不爲每天想要獲取的日期創建「日期範圍」。CoreData獲取問題:獲取具有特定日期的數組的實體
我怎樣纔能有效地解決這個問題?我應該爲N天創建N個謂詞還是用「AND」子句創建一個大謂詞?有沒有巧妙的方法來實現這個共同的目標?
我保存了實體併爲它們提供了一個名爲「date」的屬性。我的目標是獲取特定時間的對象。由於Date(NSDate)對象是特定時刻,我不得不爲每天想要獲取的日期創建「日期範圍」。CoreData獲取問題:獲取具有特定日期的數組的實體
我怎樣纔能有效地解決這個問題?我應該爲N天創建N個謂詞還是用「AND」子句創建一個大謂詞?有沒有巧妙的方法來實現這個共同的目標?
如果你需要你的數據(所有事件)multipe時間,你不應該獲取他們的每個請求,更好地過濾它們。
例如:
var allEvents = [Events]()
...
let fetchRequest = NSFetchRequest(entityName: "events")
allEvents = try context.executeFetchRequest(fetchRequest) as! [Event]
然後,當你需要他們
1.特定日期
let calender = NSCalendar.currentCalendar()
eventsForSelectedDay = events.filter({ return calender.isDate($0.yourDateProperty, inSameDayAsDate: self.currentSelectedDate) == true })
2.日期範圍
eventsForSelectedDays = events.filter({ return $0.yourDateProperty >= dateFrom && $0.yourDateProperty < dateTo })
所以你會首先獲取所有實體,然後通過篩選特定範圍來獲取所需的選擇?聽起來不錯,但我搜索特定謂詞的原因是出於記憶的原因。有沒有像應該被提取到內存中的對象數量的門檻(側重於性能)?除此之外,很好的答案。 –
isDate(_:inSameDayAsDate :):如果兩個NSDate實例在同一天返回true,則不需要對日期組件進行深入研究。你的例子是:'let filtered = events.filter {calendar.isDate($ 0.date,inSameDayAs:otherDate)}' –
你從數據庫中獲取了多少事件? – derdida
'NSCoumpoundPredicate'應該是一個使用的,每天爲你想要的每一天創建一個OR謂詞,每天使用「date> = StartOfDay和date> = endOfDay」,並用OR組合它們。 – Larme
確實使用複合謂詞結束。謝謝。 –