11

iamfetchedResultsControllerを設定しているときに、このエラーがサポートされていないNSSortDescriptor(コンパレータブロックはサポートされていません)NSSortDescriptor

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"Alarm" inManagedObjectContext: managedObjectContext];
[fetchRequest setEntity:entity];

//Below code is not working and causing error. sorting use the hours&seconds part of the time attribute  

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                          initWithKey:@"time" ascending:YES comparator:^NSComparisonResult(id obj1, id obj2) {

                                  NSCalendar *calendar = [NSCalendar currentCalendar];
                                  NSDateComponents *components1 = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit) fromDate:obj1];
                                  NSDateComponents *components2 = [calendar components:(NSHourCalendarUnit|NSMinuteCalendarUnit) fromDate:obj2];
                                  NSDate *date1 = [calendar dateFromComponents:components1];
                                  NSDate *date2 = [calendar dateFromComponents:components2];


                                  return [date1 compare:date2];

                          }];
4

2 に答える 2

11

どこでもコンパレータブロックでソート記述子を使用することはできません-たとえば、CoreDataフェッチでは使用できません。

ただし、通常の配列をフィルタリングする場合は正常に機能します。

それとは別に、私が見落としていた質問がそこにありましたか?

于 2013-02-18T14:34:42.833 に答える
7

Monoloが言ったように、CoreDataでコンパレータブロックを使用することはできません。ただし、次のものを使用できます。

[NSSortDescriptor sortDescriptorWithKey:(NSString *) ascending:(BOOL) selector:(SEL)]

標準のセレクターを使用していない場合は、モデルを拡張する必要があります。

たとえば、文字列「a la Finder」(つまり、1,10,2,9ではなく1,2,9,10)を注文する必要があり、

request.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:myEntity ascending:NO selector:@selector(localizedStandardCompare:)]];

AppleによるNSSortDescriptorクラスリファレンスをご覧ください

ハッピーコーディング:)

于 2014-07-14T20:42:25.400 に答える