我有一些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