簡體   English   中英

核心數據 - 查找具有重疊日期范圍的記錄

[英]Core Data - Finding records with overlapping date ranges

我正在開發一個帶有Core Data的iOS應用程序,用於跟蹤培訓課程和相關數據的安排。 我的模型(SIMCourse)有兩個屬性 - startDateendDate是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM