我正在开发一个使用CoreData的应用程序。
因此,在 .sqlite 文件中,它自己管理主键。
主键属性名称为 Z_PK 。
我的问题是,我希望我的表中的数据按主键升序排序。
我正在使用该代码
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"_PK" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[sort release];
但它不起作用。
当我使用“_PK”的“标题”时,它工作正常
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[sort release];
那么使用Table的主键有什么不同的方法吗?
答案 0 :(得分:4)
CoreData管理持久对象图。它不是RDBM。您无法控制唯一主键,因此无法控制其值。它只是一个实现细节,不应出于任何原因引用。
因此,您为什么要根据它进行排序?我可以想到几个原因......
1a上。您可以向每个实体添加字段。您可以将其设置为UUID或增加整数。
1b中。你可以有一个实体,比如“EntityList”,它与“实体”有一个有序的一对多关系。
1c上。您可以从Entity添加一对一的关系,然后像链接列表一样管理它。每次添加实体时,请将其放在列表的末尾。
这两个解决方案都可以让您按照添加的顺序访问Entity对象。
2a上。添加primaryKey属性,并为其分配UUID。
2B。使用有序的多对多关系。
最后,如果您真的想要基于主键的访问,我建议您使用单独的sqlite数据库进行特殊的键控访问。然后,您可以将键与CoreData存储中对象的objectID相关联。