0

Core Data データベースを検索しようとしていますが、非常に具体的なレコードのセットが返されます。

私のモデルは次のようになります。

firstName (NSString)
lastName (NSString)
dateOfBirth (NSDate)
updatedAt (NSDate)
weight (NSNumber)
height (NSNumber)

firstName一意の 、lastName、および値を持つユーザーのリストを取得したいのですがdateOfBirth、これらの各ユーザーの最新の値を持つ完全なレコードのみを返しupdatedAtます。

したがって、次のようなデータベースの場合:

firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100
firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 2/1/2012, weight: 120, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 2/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100

私は配列を取得します:

firstName: Jim, lastName: Brown, dateOfBirth: 1/1/2012, updatedAt: 2/1/2012, weight: 120, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 1/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100
firstName: Joe, lastName: Smith, dateOfBirth: 2/1/2012, updatedAt: 1/1/2012, weight: 100, height: 100

さまざまなフィルタリング操作を実行できることはわかっていますが、これに役立つ「ショートカット」があるかどうか疑問に思っていました。[fetchRequest setReturnsDistinctResults:YES]値を取得することに興味がない場合は使用できますが、フェッチするプロパティupdatedAtに含めると、基本的にすべてのレコードが返されます。データベース全体が非常に大きくなる可能性がupdatedAtあるため (> 10,000 レコード)、データベース全体をロードすることを心配しています。NSArray

4

1 に答える 1

0

まず、データモデルを修正する必要があると思います。名、姓、誕生日だけでは、(10.000のレコードのうち)一意のIDを確実に置き換えるには不十分です。

updated次に、Personエンティティを作成し、このエンティティの同じレコードを使用して、 date属性を持つある種のイベントに関連付ける必要があります。

このはるかに堅牢な構造が整っているため、クエリは簡単になります。あなたはただすべての人をフェッチします。必要に応じて、各人について最新のイベントを選択します。

Event *latestEvent = [person.events valueForKeyPath@"@max.updated"];
于 2013-02-13T22:21:46.423 に答える