0

私は Core Data を初めて使用するので、いくつかのフィールドとそのグループ内の別のフィールドの数で結果をグループ化する単純なフェッチ要求を書きたいと考えています。たとえば、製品テーブルがあり、グループ化されたすべての製品を日付と製品の数で取得したい場合、SQL の単純なクエリは次のようになります。

SELECT DateRegistered,Count(*) FROM Products  Group By DateRegistered
4

1 に答える 1

1

あなたの最善の策は、非常に柔軟NSFetchedResultsControllerです。日付属性でソートされた Product エンティティを単純にフェッチするフェッチ リクエストがあります。コア データ属性は小文字で始める必要があることに注意してください。

次のようなものを使用して、フェッチされた結果コントローラーを作成します。これは通常、ビュー コントローラーで遅延して作成される Apple サンプル コード (Xcode テンプレートを含む) を確認してください。

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Product"];
request.sortDescriptors = @[ [NSSortDescriptor 
             sortDescriptorWithKey:@"dateRegistered"
             ascending:YES] ];


_fetchedResultsController  = [NSFetchedResultsController
   initWithFetchRequest:request
   managedObjectContext:self.managedObjectContext
   sectionNameKeyPath:@"dateRegistered"
   cacheName:"Root"];

これは、日付が実際に毎日同じである場合にのみ機能します。NSDateタイプが秒単位で正確になり、各「グループ」で1つカウントされるように、おそらく文字列を使用することをお勧めします。

フェッチされた結果コントローラーを使用すると、必要なすべての数値に簡単にアクセスできます。たとえば、「グループ」番号の数i(正しい用語は「セクション」です):

id <NSFetchedResultsSectionInfo> sectionInfo = 
       [[_fetchedResultsController sections] objectAtIndex:i];
int count = [sectionInfo numberOfObjects];

フェッチされた結果コントローラーを使用すると、さらに多くのことができます! メモリを管理し、UI (テーブル ビューやコレクション ビューなど) での表示を容易にし、永続ストアへの負担を最小限に抑えます。

于 2013-06-04T14:32:53.337 に答える