[英]Core Data - Finding records with overlapping date ranges
我正在開發一個帶有Core Data的iOS應用程序,用於跟蹤培訓課程和相關數據的安排。 我的模型(SIMCourse)有兩個屬性 - startDate和endDate是NSDate對象。 到現在為止還挺好。
我現在正在努力添加一項功能,以防止在同一時間安排兩個課程。 因此,當我創建新的SIMCourse時,我想檢查其日期范圍是否與任何其他現有SIMCourse的日期范圍重疊。 換句話說,如果我的新課程在1月1日至3日運行,並且我有一個運行在1月2日至4日的課程,那顯然是一個沖突。
我知道我可以獲取數據存儲中的所有SIMCourse對象並遍歷它們,但我完全不相信這是最好的方法。 誰能幫助我指出正確的方向?
(newStartDate, newEndDate)
重疊(startDate, endDate)
if
(newStartDate <= endDate) && (startDate <= newEndDate)
(這幾乎是@Bergasms建議的,但不完全是。如果我在這里弄錯了,應該歸功於他。)
您可以使用以下獲取請求來檢查重疊課程:
NSDate *newStartDate = ...;
NSDate *newEndDate = ...;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SIMCourse"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(%@ <= endDate) AND (startDate <= %@)",
newStartDate, newEndDate];
request.predicate = predicate;
NSArray *results = [context executeFetchRequest:request error:&error];
if (error == nil) {
// handle error
} else if (results.count == 0) {
// no overlapping entries
} else {
//overlapping entries in results array
}
如果一門課程的結束日期等於另一門課程的開始日期,我假設這里有兩門課程重疊。 如果這些間隔不被視為“重疊”,則可以在謂詞中替換<=
by <
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.