我从我用来创建的Web服务中检索到一些XML数据
NSManagedObject
并存储在sqlite3备份存储中。In my app, I'm using
NSPredicate
对象按日期(连同其他字段)查询此数据。从2009年4月到2010年8月,我所拥有的数据每天都有记录(根据我从SOAP Web服务检索到的原始XML)。
下面是一个小设置:
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]]];
我能成功找回
被管理对象
使用一个
NSPRD
这样的查询:
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数据库中查找错误的数据?还有什么明显的东西我不见了吗?