0

「recordDate」でデータをセクションに分割しようとしています。各セクションでは、データは「elementName」で昇順でソートされます。以下は現在のコードです(動作していません):

NSManagedObjectContext *context = self.tankDatabase.managedObjectContext;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Log"];
request.sortDescriptors = [NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"recordDate" ascending:NO], [NSSortDescriptor sortDescriptorWithKey:@"elementName" ascending:YES selector:@selector(localizedStandardCompare:)], nil];
request.predicate = [NSPredicate predicateWithFormat:@"ownedBy = %@", self.tank];


self.controller = [[NSFetchedResultsController alloc]
                                          initWithFetchRequest:request
                                          managedObjectContext:context
                                          sectionNameKeyPath:@"recordDate"
                                          cacheName:nil];

self.controller.delegate = self;

NSError *error;
BOOL success = [self.controller performFetch:&error];

ただし、他のプロパティを使用して並べ替えようとした場合 (たとえば、elementName ASC、値 DESC、および elementName でグループ化) は正常に機能します。recordDate は、データ モデルでは「Date」型であり、クラスでは NSDate であることに注意してください。

また、recordDate には、その詳細にグループ化する必要がある分と秒が含まれています。

同様のケースをインターネット全体で検索しようとしましたが、うまくいく解決策が見つかりませんでした。私のコードで何が欠けていますか? それとも単なるAppleのバグですか?お時間を割いていただき、ありがとうございました。

4

2 に答える 2

1

私はついにそれを理解しました:

明らかに、日付間の比較を行っている(比較されている日付がまったく同じ日付を共有している場合でも)コアデータに保存されているのは1秒未満の情報です。

だから私がしたことは、コアデータに保存する前にサブセカンド情報を削除することでした:

self.recordDate = [NSDate dateWithTimeIntervalSinceReferenceDate:floor([recordDate timeIntervalSinceReferenceDate])];

これが同じ問題に直面している人の助けになることを願っています。乾杯!

于 2012-08-16T06:12:02.037 に答える
0

はい、サブソート記述子 (elementName に基づく) を開始する場合は、recordDate に関していくつかの関係が必要になるため、recordDate を切り捨てるという考えは適切です。実際、多くの場合、NSDate 情報は YY:MM:DD に切り捨てられるため、同じ日に属するすべてのイベントを区別できません。

余談ですが、多くの場合、sectionNameKeyPath のみを「粗粒度」にする必要があります。たとえば、recordDate から 1 秒未満の情報を削除して新しい一時属性を作成し、それを sectionNameKeyPath として NSFetchedResultsController にフィードします。つまり、recordDate をそのまま続行できます...

これは、セクション名が A、B、C、...、Z である姓の並べ替え (昇順など) に似ています。

于 2014-02-19T09:50:12.230 に答える