Iphone 比较相同日期/时间的两个NSDATE
Iphone 比较相同日期/时间的两个NSDATE,iphone,objective-c,nsdate,nscalendar,nsdatecomponents,Iphone,Objective C,Nsdate,Nscalendar,Nsdatecomponents,date1==date2不是有效的比较方法吗?如果没有,正确的选择是什么 这是我的密码: - (NSDate*) dateWithNoTime { unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit; NSCalendar* calendar = [NSCalendar currentCalendar]; NSDateComponents* components
date1==date2
不是有效的比较方法吗?如果没有,正确的选择是什么
这是我的密码:
- (NSDate*) dateWithNoTime {
unsigned int flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:flags fromDate:self];
NSDate* dateOnly = [calendar dateFromComponents:components];
return dateOnly;
}
- (BOOL) sameDayAsDate:(NSDate*)dateToCompare {
NSDate *date1 = [self dateWithNoTime];
NSDate *date2 = [dateToCompare dateWithNoTime];
return date1 == date2; // HERE IS WHERE THINGS SEEM TO FAIL
}
您正在比较两个指针值。您需要使用NSDate比较方法,如:
return ([date1 compare:date2] == NSOrderedSame);
您不能在Objective-C中使用
==
来比较对象相等性(它将采用C的含义,比较指针)。与其他语言一样,您只需比较对象指针
您需要的消息是isEqualToDate:
,也称为[date1 isEqualToDate:date2]
,与C语言(Objective-C是其超集)一样,===
(相等)运算符比较两个指针值是否相等(即,如果两个变量持有相同的对象)。虽然这适用于比较基本值(int
s、char
s、bool
s),但它不适用于Objective-C对象,这些对象的内容可能相同,但内存位置不同(这是相等运算符比较的内容)
为了检查两个对象是否相等,
NSObject
提供了一个-isEqual:
方法,您可以将该方法用作一般语句(例如[date1 isEqual:date2]
),一些类选择提供更具体的比较方法,例如用于比较-isequaldate:
,或-isEqualToString:
用于比较NSString
s。这些方法不能用于比较基元类型(例如,int
s),因为它们不是对象,但几乎适用于所有对象。“在Objective-C中永远不能使用=
”有点苛刻。当然你可以用它,只是不是为了格雷格要问的目的。是的,你写的是正确的,但是措辞很奇怪。isEqualToDate检查完全相等,所以它可能永远不会返回true。这不是由isEqual:
调用的吗?