我有一个父<-->>
子关系(to-many)。
这种关系是我需要获取所有孩子的时候,Parent.children = (NSSet *) child(s)
有些时候我只需要基于Child实体的timeStamp属性的一个,最新的实体。
我正在徘徊最简单的获取方式,比创建获取请求和设置获取限制一更简单,并使用排序描述符根据timeStamp对其进行排序。
有更简单的方法吗?只是打电话:
[Parent.children firstObject];
原因是我需要在应用程序的整个生命周期中多次获取它。在某些情况下,我虽然必须在-(void)awakeFromFetch() of a Parent Entity
中获取最新的Child实体..这就是为什么我想要一种比内存方面更容易的方式。
当获取子实体时,我有点使用这个谓词从2个或更多父实体中获取一堆子实体:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"forParent IN %@", [Array of Parents]];
从结果NSSet中,因为我将获得所述对象的所有必需的Child实体,如果我可以根据<最新子项分配指针,那将非常方便strong> timeStamp 属性(NSDate)。
显然,在我得到NSSet结果后,我可以遍历每个子节点并分配指向我在NSSet中找到的最新实体的指针,但它看起来非常费劲,尽管我只需要分配一个指向特定父的最新实体,迭代一个可能有一百多个实体的NSSet似乎bad programming
。
有什么想法吗?
答案 0 :(得分:1)
您有几种选择。 fetchLimit = 1的获取请求按时间排序实际上并不是一个糟糕的选择。您甚至可以在模型GUI中将时间戳字段设为INDEX,并且查找速度非常快。
如果数据库将不断变化,并且您始终希望访问最新项目,请考虑在NSManagedObjectContext上注册DidSave通知。
保存上下文时(或者甚至在任何对象发生更改时)都可以调用。在通知方法中,只需查看插入的项目,然后更新以获取最新值。
您可以搜索插入的对象,并获取具有最大时间戳的匹配实体。
保存和对象更改的通知是:
NSManagedObjectContextDidSaveNotification NSManagedObjectContextObjectsDidChangeNotification