カレンダーやリマインダーを並べ替える方法はありますか?sortIndexプロパティなどが見つかりません...リマインダーアプリはどのようにアイテムを並べ替えますか?
よろしくお願いします
カレンダーやリマインダーを並べ替える方法はありますか?sortIndexプロパティなどが見つかりません...リマインダーアプリはどのようにアイテムを並べ替えますか?
よろしくお願いします
現在、iOS 6 SDK では、リマインダー アプリで使用される並べ替えインデックスへのパブリック アクセスはありません。アプリ内で他の方法を使用して並べ替える必要があります。
これを使用して、EKReminders を優先度順に並べ替えました
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"priority" ascending:YES] ;
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:sortDescriptors];
これは、2 つのリマインダー (EKReminder インスタンス) を比較するメソッドを含む EKReminder のカテゴリです。次に、NSArray メソッドの「sortUsingSelector」を次のように使用します。
[myReminders sortUsingSelector:@selector(compare:)];
並べ替え基準は次のとおりです。 1) 完了したリマインダーはすべて、未完了の (未完了の) リマインダーの下に表示されます。
2) 開いているリマインダーは、アラームの日付 (alarm.absoluteDate) で並べ替えられます。
3) 完了したリマインダーは、completedDate で並べ替えられます
お役に立てれば!
@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;
}
@終わり