【发布时间】:2012-10-04 13:47:39
【问题描述】:
有没有办法对日历或提醒进行排序?我还没有找到 sortIndex 属性或类似的东西...... 提醒应用如何对项目进行排序?
最好的问候
【问题讨论】:
标签: calendar ios6 eventkit reminders ekeventkit
有没有办法对日历或提醒进行排序?我还没有找到 sortIndex 属性或类似的东西...... 提醒应用如何对项目进行排序?
最好的问候
【问题讨论】:
标签: calendar ios6 eventkit reminders ekeventkit
目前在 iOS 6 SDK 中,无法公开访问提醒应用程序使用的排序索引。您需要在应用程序中使用其他方法进行排序。
【讨论】:
我用它来按优先级对 EKReminder 进行排序
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"priority" ascending:YES] ;
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:sortDescriptors];
【讨论】:
这里是 EKReminder 的一个类别,包含一个比较 2 个提醒的方法(EKReminder 实例)。然后我使用 NSArray 方法“sortUsingSelector”如下:
[myReminders sortUsingSelector:@selector(compare:)];
排序标准如下: 1) 所有已完成的提醒都列在未完成(未完成)的提醒下方
2)打开的提醒按闹钟日期排序(alarm.absoluteDate)
3) 完成的提醒按completionDate排序
希望这会有所帮助!
@implementation EKReminder(排序)
-(NSComparisonResult)compare:(EKReminder*)reminder { NSComparisonResult 结果 = NSOrderedSame;
if(self.completed) {
if(reminder.completed) {
result = [reminder.completionDate compare:self.completionDate];
} else {
result = NSOrderedDescending;
}
} else {
if(reminder.completed) {
//do nothing
result = NSOrderedSame;
} else {
NSDate *date1 = [self.alarms.firstObject absoluteDate];
NSDate *date2 = [reminder.alarms.firstObject absoluteDate];
if(date1) {
if(date2) {
result = [date1 compare:date2];
} else {
result = NSOrderedDescending;
}
} else {
//do nothing
result = NSOrderedSame;
}
}
}
return result;
}
@结束
【讨论】: