我有一些XML數據從Web服務檢索到,我用它來創建NSManagedObject
並存儲在sqlite3後備存儲中。在我的應用程序中,我使用NSPredicate
對象按日期查詢此數據(以及其他字段)。我從2009年4月到2010年8月每天都會記錄這些數據(根據從SOAP Web服務檢索到的原始XML)。在NSPredicate中查詢日期看起來不正確:無法匹配未來日期
這裏有一個小設置:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *today = [cal dateFromComponents:[cal components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit
fromDate:[NSDate date]]];
NSDate *day1ahead = [cal dateFromComponents:[cal components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit
fromDate:[NSDate dateWithTimeIntervalSinceNow:kSecondsPerDay]]];
NSDate *day2ahead = [cal dateFromComponents:[cal components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit
fromDate:[NSDate dateWithTimeIntervalSinceNOw:kSecondsPerDay*2]]];
我能夠成功地使用NSPredicate
這樣的查詢檢索NSManagedObject
S:
NSPredicate *todaysData = [NSPredicate predicateWithFormat:@"(StartDate >= %@) AND (StartDate <= %@)", today, day1ahead];
然而,當我喜歡的下一個查詢,我得到bupkis。
NSPredicate *tomorrowsData = [NSPredicate predicateWithFormat:@"(StartDate >= %@) AND (StartDate <= %@)", day1ahead, day2ahead];
我查了XML數據,併爲這我想查詢是否有將來的日期,我也直接檢查了sqlite3的後備存儲這樣的:
sqlite> select datetime(startdate, "unixepoch", "31 years") from mydatatable;
結果這個簡單的查詢表明我未來的日期在那裏。
我甚至嘗試這樣的查詢:
NSPredicate *allFuture = [NSPredicate predicateWithFormat:@"(StartDate >= %@)", today];
結果不包括任何超出當前日期。它似乎在後備存儲中,所以我對NSPredicate對象爲什麼沒有按照我期望的方式工作感到有點不知所措。
有沒有辦法看到CoreData生成的實際SQL語句,所以我可以真正看到發生了什麼?我在sqlite3數據庫中查看錯誤的數據嗎?還有什麼明顯的我失蹤了嗎?
謝謝!實際上我發現問題在於我沒有在陣列中加載正確的數據,而我正在運行查詢。我打算刪除這個問題,但這是一個很好的答案。 – 2010-06-21 07:43:39