根据第二个数组对 NSManagedObjects 数组进行排序

Sort array of NSManagedObjects based on second array

我正在尝试根据与每个数组关联的值对 NSManagedObject 数组进行排序。这些值的计算成本很高,所以我想最多计算一次。类似问题的大多数解决方案都涉及构建 NSDictionary 但我的对象不(必然)符合 NSCopying 协议。我考虑过使用对象 ID,但是否有 cleaner/simpler 解决方案?这个方法有什么问题吗?

  1. NSManagedObject 子类中创建一个方便的方法来计算您需要排序的值并将 return 它。对其进行编码,使其只计算一次值。
  2. 按方便的方法排序。

更新到 OP

Can you elaborate on how you do 1. ? Should I use NSCache ? Thanks

你子类 NSManagedObject:

@interface MySubclass: NSManagedObject
@property NSString *myCalculatedSortValue;

- (NSString*)calculatedSortValue;

@end

然后你以懒惰的方式实现它:

@implementation MySubclass

- (NSString*)calculatedSortValue
{
  if (myCalculatedSortValue) return myCalculatedSortValue;
  //calculate value
  return myCalculatedSortValue;
}

然后您可以按 calculatedSortValue 排序,每个生命周期只会计算一次。

注意: 这仅在 NSManagedObject 实例从商店中获取后才有效。这不会直接对商店起作用,因为所有计算都发生在 object-space.

我找到了一个非常简单的解决方法来解决我的问题。我可以只创建一个字典,其键是我的对象在其数组中的索引,其关联值是与对象关联的值。我按值对字典进行排序,然后按键给定的顺序检索对象。