Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 比较相同日期/时间的两个NSDATE_Iphone_Objective C_Nsdate_Nscalendar_Nsdatecomponents - Fatal编程技术网

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:
调用的吗?