Objective c 仅获取';最新版本';单一实体-核心数据

Objective c 仅获取';最新版本';单一实体-核心数据,objective-c,core-data,nsfetchrequest,Objective C,Core Data,Nsfetchrequest,我(对许多人)有父母子女关系。 当我需要获取所有子项时,就会出现这种关系,Parent.children=(NSSet*)子项 有时,我只需要一个基于子实体的timeStamp属性的最新实体 我在想什么是获取它的最简单的方法,比创建一个获取请求并设置获取限制1并使用排序描述符根据时间戳对其排序更简单 有没有更简单的方法?只是打个电话也许: [Parent.children firstObject]; 原因是在应用程序的整个生命周期中,我需要多次获取它。在某些情况下,我认为我必须在父实体的-(v

我(对许多人)有父母子女关系。 当我需要获取所有子项时,就会出现这种关系,
Parent.children=(NSSet*)子项

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

我在想什么是获取它的最简单的方法,比创建一个获取请求并设置获取限制1并使用排序描述符根据时间戳对其排序更简单

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

[Parent.children firstObject];
原因是在应用程序的整个生命周期中,我需要多次获取它。在某些情况下,我认为我必须在父实体的
-(void)awakeFromFetch()中获取最新的子实体。。这就是为什么我想找到一种比任何事情都简单的方法,特别是在记忆方面


在获取子实体时,我使用以下谓词获取了一组子实体,它们是2个或更多父实体的子实体:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"forParent IN %@", [Array of Parents]];
从生成的NSSet中,由于我可以获得所述对象所需的所有子实体,因此如果我可以根据其时间戳属性(NSDate)为中的最新子对象分配一个指针,那将非常方便

显然,在得到NSSet结果后,我可以迭代每个子项,并分配一个指针指向我在NSSet中找到的最新实体,但这看起来相当费劲,尽管我只需分配一个指针指向特定父项的最新实体,迭代一个可能有100多个实体的NSSet似乎是
糟糕的编程


有什么想法吗?

你有几种选择。按时间排序的fetchLimit=1的fetch请求实际上是一个不错的选择。您甚至可以将时间戳字段作为模型GUI中的索引,并且查找速度将非常快

如果数据库将不断变化,并且您总是希望访问最新的项目,请考虑在NSMARCADION对象上下文中注册DIDSaveNo../P> 保存上下文时(甚至在任何对象发生更改时)可以调用您。在通知方法中,只需查看插入的项,然后更新以获取最新的值

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

保存和对象更改的通知包括:

NSManagedObjectContextDidSaveNotification
NSManagedObjectContextObjectsIDChangeNotification有几个选项。按时间排序的fetchLimit=1的fetch请求实际上是一个不错的选择。您甚至可以将时间戳字段作为模型GUI中的索引,并且查找速度将非常快

如果数据库将不断变化,并且您总是希望访问最新的项目,请考虑在NSMARCADION对象上下文中注册DIDSaveNo../P> 保存上下文时(甚至在任何对象发生更改时)可以调用您。在通知方法中,只需查看插入的项,然后更新以获取最新的值

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

保存和对象更改的通知包括:

NSManagedObjectContextDidSaveNotification
NSManagedObjectContextObjectsIDChangeNotification

我使用了类似的问题NSExpression和
max:
函数,而不是限制1和排序。另一种解决方案是在父实体的模型中创建latestChild属性,并在创建每个新子实体时设置它。这并不理想,但很有效,而且是最快的解决方案。你能详细说明一下吗?我没有完全理解“在父实体上的模型中创建”让我解释一下:)您有两个实体-父实体和子实体。将名为latestChild的新属性添加到模型中的父实体(由xcode定义的MOM),并将此latestChild设置为最近添加到Parent.childrens的child。最后,latestChild是与Child的直接关系,而不是通过谓词或迭代计算出的关系。ups…不是MOM而是xcdatamodel:)@thom_ek我就是这么做的:)我在父级和子级之间添加了另一个一对一关系,在任何情况下称之为latestChild,而不是属性,我确实需要迭代抛出其他子实体,如果我达到数组的最后一个索引计数,我只需将它添加到单个latestChild关系中。我使用了类似的问题NSExpression,而不是limit 1和sort,使用
max:
函数。另一种解决方案是在父实体的模型中创建latestChild属性,并在创建每个新子实体时设置它。这并不理想,但很有效,而且是最快的解决方案。你能详细说明一下吗?我没有完全理解“在父实体上的模型中创建”让我解释一下:)您有两个实体-父实体和子实体。将名为latestChild的新属性添加到模型中的父实体(由xcode定义的MOM),并将此latestChild设置为最近添加到Parent.childrens的child。最后,latestChild是与Child的直接关系,而不是通过谓词或迭代计算出的关系。ups…不是MOM而是xcdatamodel:)@thom_ek我就是这么做的:)我在父级和子级之间添加了另一个一对一关系,在任何情况下称之为latestChild,而不是属性,我必须迭代抛出其他子实体,如果我达到数组的最后一个索引计数,我只需将它添加到单个latestChild关系中。