0

fetchResultsControllerによって処理されるフォーメーションのリストを含むテーブルビューコントローラーがあります。

コアデータエンティティは次のようになります。

ここに画像の説明を入力してください

私は次のようにfetchResultsControllerをソートしようとしますdateRange

// |fetchedResultsController| custom setter
- (NSFetchedResultsController *)fetchedResultsController {
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:self.fetchRequest managedObjectContext:self.mainManagedObjectContext sectionNameKeyPath:@"dateRange" cacheName:kFormationsFetchedCacheName];
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;
}

// |fetchRequest| custom setter
- (NSFetchRequest *)fetchRequest {
    if (_fetchRequest != nil) {
        return _fetchRequest;
    }

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"student == %@", self.currentStudent];
    NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dateRange" ascending:NO];
    NSSortDescriptor *nameDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:NO];

    _fetchRequest = [[NSFetchRequest alloc] initWithEntityName:kBSFormation];
    _fetchRequest.predicate = predicate;
    _fetchRequest.sortDescriptors = [NSArray arrayWithObjects: dateDescriptor, nameDescriptor, nil];

    return _fetchRequest;
}

最初に追加しようとするとすべて問題ありませFormationんが、次のエラーについては次のエラーが発生します。

2013-01-30 22:43:08.370 [7202:c07] -[BSDateRange compare:]: unrecognized selector sent to instance 0x81781a0

2013-01-30 22:43:08.371 [7202:c07] CoreData: error: Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  -[BSDateRange compare:]: unrecognized selector sent to instance 0x81781a0 with userInfo (null)

2013-01-30 22:43:08.372 [7202:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[BSDateRange compare:]: unrecognized selector sent to instance 0x81781a0'

この行にコメントすると: 、動作していますが、に設定されNSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dateRange" ascending:NO];ているため、テーブルビューが乱雑になりますsectionNameKeyPathdateRange

誰かがここで何が問題なのか理解していますか?:/

4

1 に答える 1

2

dateRange関係に基づいて並べ替えるように指示しています。しかしdateRange、との関係はあり、BSDateRangeCore Dataはそれらをどのように比較しますか?fromそれは、または多分to、またはそれらのいくつかの組み合わせを使用する必要がありますか?並べ替えがどのように機能するかが明確でないため、そのようなオブジェクトで並べ替えるように指示することはできません。

代わりに、最初に並べ替えの意味を理解してください。次に、ソート記述子を適切に変更します。たとえば、並べ替えがfrom値に依存すると判断した場合は、並べ替え記述子を変更して、キーパスを次のように使用しますfrom

NSSortDescriptor *dateDescriptor = [NSSortDescriptor
    sortDescriptorWithKey:@"dateRange.from"
    ascending:NO];

fromとの両方に基づいて並べ替える必要がある場合はto、複数の並べ替え記述子を使用してください。

于 2013-01-30T22:58:15.360 に答える