2010-06-21 43 views
0

我有一些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數據庫中查看錯誤的數據嗎?還有什麼明顯的我失蹤了嗎?

回答

1

有沒有辦法看到CoreData生成的實際SQL語句,以便我可以看到真正發生了什麼?

是的。在Xcode的Active Executable設置中,將-com.apple.CoreData.SQLDebug 1添加到「要在啓動時傳遞的參數」列表中,並選中複選標記。核心數據然後將NSLog的SQL查詢。

+1

謝謝!實際上我發現問題在於我沒有在陣列中加載正確的數據,而我正在運行查詢。我打算刪除這個問題,但這是一個很好的答案。 – 2010-06-21 07:43:39