2

我正在开发一个使用 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 的主键呢?

4

1 回答 1

4

CoreData 管理持久对象图。它不是 RDBM。您无法控制唯一主键,因此您无法控制其值。它只是一个实现细节,不应以任何理由引用。

因此,为什么要根据它进行排序?我能想到几个原因...

  1. 您希望按照对象添加到数据库的顺序访问对象。但是,您可以通过多种方式轻松地做到这一点。

1a。您可以为每个实体添加一个字段。您可以将其设置为 UUID 或递增整数。

1b。您可以有一个实体,例如“EntityList”,它与“Entity”具有有序的一对多关系。

1c。您可以添加从实体到自身的一对一关系,然后像链接列表一样管理它。每次添加实体时,将其放在列表末尾。

这两种解决方案都使您能够按添加顺序访问 Entity 对象。

  1. 或者,你真的不在乎你看到它们的顺序,但你想要一个一致的顺序。

2a. 添加一个 primaryKey 属性,并为其分配一个 UUID。

2b。使用有序对多关系。

最后,如果您真的想要基于主键的访问,我建议您拥有一个单独的 sqlite 数据库,用于特殊键访问。然后,您可以将键关联到 CoreData 存储中对象的 objectID。

于 2012-04-15T04:09:35.470 回答