1

我正在创建一个应用程序并使用核心数据存储数据。它工作正常,但我想知道从 set 返回排序数组的最佳方法是什么?

例如,我有一个实体 A(按钮),其中包含实体 B(图像)的列表。众所周知,核心数据使用 NSSet 存储多对多关系。但我想跟踪最初的订单,所以我为此添加了一个属性“订单”。问题是在我的代码中我需要排序的图像列表,所以在一个类别文件(按钮+创建)中我创建了一个像这样的方法:

- (NSArray*)imagesArray
{
    return [self.images sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDeacriptorWithKey:@"order" ascending:YES]]];
}

但我认为这不是最好的方法,因为如果需要从我的代码中的多个区域(不同的类)访问这个列表,那么我需要对集​​合进行 x 次排序......有没有办法添加一个数组(属性)在我的类别中排序一次然后只检索属性?

你对此有什么看法?

谢谢

4

2 回答 2

1

您可以将属性添加到类别:http: //developer.apple.com/library/ios/#documentation/cocoa/Conceptual/ObjectiveC/Chapters/ocAssociativeReferences.html

这是另一个例子:

如何通过类别扩展向 NSMutableArray 添加属性?

请注意,您将负责观察初始 coredata NSSet 属性的更改(例如通过 KVO)。
因此,如果发生更改,您必须正确“重新计算”您的属性......
如果您的目标是 iOS 5.0 或更高版本,我建议使用有序集,但由于您不是,我可以想象使用描述的方式在上面的链接中

于 2012-12-03T18:44:42.417 回答
0

我认为您使用 order 属性的方法是正确的。我宁愿在我的模型中创建一个类似 -(NSArray *)sortedItems 的方法,它会有一个带有适当排序描述符的 NSFetchRequest。如果您愿意,可以缓存结果 - 将此数组保存在内存中。您的 NSManagedObject 也可以具有不存储在数据库中的属性,只是在内存中。但考虑到 Core Data 的速度和性能,我真的认为这没有必要。

于 2012-12-03T17:15:43.203 回答