我正在为iOS创建待办事项列表应用。待办事项列表分为几个部分:
第0节 - >过期物品
第1节 - >今日物品
第2节 - >明天的项目
第3节 - >即将开始的项目
第4节 - > SOMEDAY项目
第5节 - >已完成的项目
正如您可能想象的那样,在午夜之后,剩余的TODAY项目应该传递到OVERDUE部分,明天的项目应该传递到TODAY部分,并且一些UPCOMING项目应该传递到TOMORROW部分。
现在的应用程序,如果用户在早上启动应用程序,所有项目都会显示在各自的部分中。
当用户在午夜之前使用应用程序并且只是通过午夜时,会出现问题。这些项目不会自动传递到正确的部分。
我只能在模拟器上测试应用程序,但我想这个问题也会在真实设备上发生。
所有项目都有一个名为todoDueDate的属性,并且所有项目都具有日期值的相同时间部分,所有项目时间都设置为上午10:00。
要将项目分配到我正在使用名为sectionIdentifier的transient属性的部分,该属性在名为ToDoItem的NSManagedObject子类中定义。
这里有方法:
-(NSString *)sectionIdentifier{
[self willAccessValueForKey:@"sectionIdentifier"];
NSString *tmp = [self primitiveValueForKey:@"sectionIdentifier"];
[self didAccessValueForKey:@"sectionIdentifier"];
if (!tmp){
NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger comps = (NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit);
NSDate *today = [NSDate date];
NSDate *date = self.todoDueDate;
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setCalendar:calendar];
[components setYear:2065];
[components setMonth:11];
[components setDay:12];
NSDate *dateFuturoSomeday = [calendar dateFromComponents:components];
NSCalendar *calendar1 = [NSCalendar currentCalendar];
NSDateComponents *components1 = [[NSDateComponents alloc] init];
[components1 setCalendar:calendar1];
[components1 setYear:2065];
[components1 setMonth:11];
[components1 setDay:13];
NSDate *dateFuturoCompleted = [calendar1 dateFromComponents:components1];
NSDateComponents *date1Components = [calendar components:comps
fromDate: today];
NSDateComponents *date2Components = [calendar components:comps
fromDate: date];
NSDateComponents *date3Components = [calendar components:comps
fromDate: dateFuturoSomeday];
NSDateComponents *date4Components = [calendar components:comps
fromDate: dateFuturoCompleted];
today = [calendar dateFromComponents:date1Components];
date = [calendar dateFromComponents:date2Components];
dateFuturoSomeday = [calendar dateFromComponents:date3Components];
dateFuturoCompleted = [calendar dateFromComponents:date4Components];
NSInteger daysAfterToday = [calendar components:NSDayCalendarUnit
fromDate:today toDate:date options:0].day;
// NSString *section;
if (daysAfterToday < 0) {
tmp = @"0";
} else if (daysAfterToday == 0) {
tmp = @"1";
} else if (daysAfterToday > 0 && daysAfterToday < 2) {
tmp = @"2";
}
else if ([self.todoDueDate isEqualToDate:dateFuturoSomeday]){
tmp = @"4";
}
else if ([self.todoDueDate isEqualToDate:dateFuturoCompleted]){
tmp = @"5";
}
else {
tmp = @"3";
}
[self setPrimitiveValue:tmp forKey:@"sectionIdentifier"];
}
return tmp;
}
我可以做些什么来达到理想的行为?这意味着,当用户在午夜使用应用程序时,项目应自动传递到预期的部分。
谢谢。
答案 0 :(得分:1)
虽然专为......井,本地通知而设计,但您可以轻松地使用通知触发作为刷新已提取数据的排序的方法。
建议: