CoreData:如何通过主键对NSManagedObject进行排序?

时间:2010-06-25 17:40:37

标签: iphone objective-c core-data

我有一个NSManagedObject的子类,如下所示 并通过NSManagedObjectContext存储了一些实例。

@interface SomeModelObject : NSManagedObject  
  @property (nonatomic, retain) NSString * text; 
@end

现在,我想获取按主键排序的列表(自动创建)。 我尝试过NSFetchRequest并遇到运行时错误:“在实体中找不到keypath id。”

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeModelObject" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sort, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

是否可以按主键排序?或者我应该在Model类中添加一些列进行排序?

2 个答案:

答案 0 :(得分:7)

鉴于主键是一个不透明的数据类型,其值是一个完全在你的控件之外的任意实现细节(包括可能不会随着时间的推移而变化),想要按它排序似乎是不合理的。

如果您正在寻找稳定,有决心的订单,那么 - 是 - 按其他属性排序,无论是现有属性还是新属性。

请注意,通常,最好不要考虑关系数据库术语中的核心数据。专注于对象图和对象建模方面,因为这是API所关注的。

答案 1 :(得分:1)

使用以self作为排序关键字的排序描述符(而不是id)。基础SQL将具有ORDER BY t0.Z_PK