复杂的核心数据搜索

时间:2013-02-13 21:32:07

标签: ios objective-c core-data

我正在尝试搜索我的核心数据数据库,返回一组非常具体的记录。

我的模型看起来像这样:

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

我希望获得具有唯一firstNamelastNamedateOfBirth值的用户列表,但只返回每个用户的完整记录{{1价值。

因此,对于数据库如:

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条记录)。

1 个答案:

答案 0 :(得分:0)

首先,我认为你应该修改你的数据模型。名字,姓氏和出生日期不足以可靠地替换唯一ID(超过10,000个记录)。

其次,您应该创建一个Person实体,并使用该实体的相同记录与某种带有updated日期属性的事件相关联。

有了这个更加健壮的结构,您的查询变得微不足道。你只需要取得所有人。对于每个人,如果需要,请选择最近的事件。

Event *latestEvent = [person.events valueForKeyPath@"@max.updated"];