【发布时间】:2017-01-04 21:18:32
【问题描述】:
我正在从 iCloud 获取数据,如果它比设备上的数据更新,我想比较它。但是,即使 iCloud 数据较旧,我的 if 语句也会计算为 true。
这是我的代码:
NSLog(@"users date: %@",userDefaultsModificationDate);
NSLog(@"icloud fetch date : %@",fetchedRemindersRecord.modificationDate);
NSComparisonResult result = [[NSCalendar currentCalendar] compareDate:fetchedRemindersRecord.modificationDate toDate:userDefaultsModificationDate toUnitGranularity:NSCalendarUnitSecond];
switch (result) {
case NSOrderedSame:
NSLog(@"same");
break;
case NSOrderedDescending:
NSLog(@"desc");
break;
case NSOrderedAscending:
NSLog(@"asc");
break;
default:
break;
}
if (result == NSOrderedDescending){
[self createReminders:[NSKeyedUnarchiver unarchiveObjectWithData:[fetchedRemindersRecord objectForKey:@"reminders"]]];
NSLog(@"Fetched records successfully users date: %@",userDefaultsModificationDate);
NSLog(@"Fetched records successfully icloud fetch date : %@",fetchedRemindersRecord.modificationDate);
}
控制台:
users date: 2016-08-28 22:52:05 +0000
icloud fetch date : 2016-08-28 22:51:57 +0000
asc
Fetched records successfully users date: 2016-08-28 22:44:16 +0000
Fetched records successfully icloud fetch date : 2016-08-28 22:43:38 +0000
您可以清楚地看到,iCloud 数据较旧,并且 switch 语句表示顺序为升序,但 if 语句仍为 true。我什至在比较之前检查以确保两个日期都不是nil。
我已经为此苦苦挣扎了一个小时,似乎无法弄清楚发生了什么......可能是我忽略了一些明显的事情。
提前致谢!
编辑:无论我将result 与什么进行比较,它总是评估为真
【问题讨论】:
-
那里没有明显的问题。但是将您的 NSLog 语句移到 if 语句之前 - 那是我们需要知道这些项目的值的时候。
-
你的 asc 和 desc 放错地方了。
-
是的,对不起,我在 Stackoverflow 上用手机写了代码,实际代码没问题
-
而且您仍然没有将 NSLog 语句 放在 if 语句
-
不幸的是,同样的事情发生了!
标签: ios xcode if-statement compare nsdate