1

我有一个父子<-->>关系(对多)。关系是当我需要获取所有孩子时,Parent.children = (NSSet *) child(s)

有时我只需要一个基于子实体的 timeStamp 属性的最新实体。

我在徘徊什么是最简单的获取它的方法,比说创建获取请求并设置获取限制一并使用排序描述符根据时间戳对其进行排序要容易。

有没有更简单的方法?只是打电话也许:

[Parent.children firstObject];

原因是我需要在应用程序的整个生命周期中多次获取它。在某些情况下,尽管我必须在-(void)awakeFromFetch() of a Parent Entity.. 中获取最新的子实体,这就是为什么我想要一种比其他任何东西都更容易的方式,特别是在内存方面。


当获取子实体时,我有点使用这个谓词获取一堆它们是 2 个或更多父实体的子实体:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"forParent IN %@", [Array of Parents]];

从生成的 NSSet 中,由于我会为所述对象获取所有必需的子实体,因此如果我可以根据其timeStamp属性(NSDate)分配一个指向最新子实体的指针,那将非常方便。

显然,在我得到 NSSet 结果之后,我可以遍历每个孩子并分配一个指向我在 NSSet 中找到的最新实体的指针,但它看起来非常费力,尽管我必须只分配一个指向最新实体的指针一个特定的级,迭代一个可能有一百多个实体的 NSSet 似乎bad programming

有任何想法吗?

4

1 回答 1

1

你有几个选择。fetchLimit = 1,按时间排序的获取请求实际上不是一个坏选择。您甚至可以在模型 GUI 中将时间戳字段设置为 INDEX,查找速度会非常快。

如果数据库会不断变化,并且您总是希望访问最近的项目,请考虑在 NSManagedObjectContext 上注册 DidSave 通知。

您可以在保存上下文时调用(甚至在任何对象发生更改时)。在通知方法中,只需查看插入的项目,然后更新以获取最新值。

您可以搜索插入的对象,并获取具有最大时间戳的匹配实体。

保存和对象更改的通知是:

NSManagedObjectContextDidSaveNotification NSManagedObjectContextObjectsDidChangeNotification

于 2012-05-15T01:27:26.457 回答