den*_*bec 7 iphone objective-c nsdate fetch nspredicate
我正在尝试获取我的实体"MeterReading"的结果,它有两个属性,"timestamp"和"reading"."timestamp"是一个NSDate.我现在正在尝试获取具有确切日期的对象.
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MeterReading" inManagedObjectContext:context];
[request setEntity:entity];
NSLog(@"%f", [self.timestamp timeIntervalSince1970]);
NSPredicate *pre = [NSPredicate predicateWithFormat:@"timestamp == %@", self.timestamp];
NSLog(@"%@", pre);
[request setPredicate:pre];
Run Code Online (Sandbox Code Playgroud)
现在,self.timestamp预先传递给另一个ViewController,NSLog显示:
1290264372.210091
NSPredicate日志
timestamp == CAST(311957172.210091,"NSDate")
第一个问题:为什么这两个数字不相同?
第二个也是更重要的问题:在ManagedContext中,我有四个带日期的条目.如果我使用"<="而不是"==",我会得到日期小于我通过的日期的结果,包括我想要的日期.为什么我不能使用"=="运算符获得单个日期?这可以与我约会的精确度有关吗?
谢谢!
这与浮点相等检查本质上不安全的问题相同。当浮点值被传递、转换、用于算术等时,它们会一点一点地失去准确性。您可能必须使用更复杂的谓词来检查特定容差内的日期;例如,
NSArray *timestamps = [NSArray arrayWithObjects:
[self.timestamp dateByAddingTimeInterval:-1],
[self.timestamp dateByAddingTimeInterval:1],
nil
];
NSPredicate *pre = [NSPredicate predicateWithFormat:@"timestamp BETWEEN %@", timestamps];
Run Code Online (Sandbox Code Playgroud)
这将为您提供与您的日期加或减一秒匹配的任何对象。
| 归档时间: |
|
| 查看次数: |
3958 次 |
| 最近记录: |