订单 Coredata 子实体

Order Coredata Sub-entity

我的名为 Score 的实体包含名为 Messages 的实体。这是一个 one-to-many 的关系,对于一个 Score,我们可以有很多 Messages

当我获取 Score 时,我可以访问 NSOrderedSet 中的 Messages 对象,因为我在 .xcdatamodel 文件中勾选了 Ordered。

它们只是没有正确排序,我想知道是否可以修复。

我在一个像这样构建的数组的表视图中显示它们

//_score exists and is set properly.

someArray = array-alloc-init;

for (Message *msg in _score.messages)
{
    //Do my stuff because objects need remodeling in that view
    //
    [someArray addObject:msg];
}

[tableview reloadData];  //the tableview uses someArray

除了顺序不对之外,一切都很顺利。

例如,我可以在哪里(如果可能)告诉模型按 "CreationDate" 订购。 "Ordered" 复选框似乎以一种不起作用的方式对其进行排序。

有序集采用您最初填充关系的任何顺序(一次性或在项目添加到关系末尾时)。

因此,如果您可以保证可以按顺序添加它们,或者您编写了一些代码以在正确的位置插入到关系中,那么您可以继续当前的代码。

或者,您可以创建一个提取请求,使用关系 'backwards' 为指定的 Score 查找 Message 并适当地对它们进行排序。这里的主要好处是您可以决定即时更改排序顺序,您可以指定多个排序顺序(允许用户根据需要进行更改)并且您可以显式设置获取批处理大小(如果您有很多消息,这会有所帮助。