我有一个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类中添加一些列进行排序?
答案 0 :(得分:7)
鉴于主键是一个不透明的数据类型,其值是一个完全在你的控件之外的任意实现细节(包括可能不会随着时间的推移而变化),想要按它排序似乎是不合理的。
如果您正在寻找稳定,有决心的订单,那么 - 是 - 按其他属性排序,无论是现有属性还是新属性。
请注意,通常,最好不要考虑关系数据库术语中的核心数据。专注于对象图和对象建模方面,因为这是API所关注的。
答案 1 :(得分:1)
使用以self
作为排序关键字的排序描述符(而不是id
)。基础SQL将具有ORDER BY t0.Z_PK
。