iPhone核心数据获取主键

时间:2012-04-14 11:42:59

标签: iphone core-data primary-key

我正在开发一个使用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的主键有什么不同的方法吗?

1 个答案:

答案 0 :(得分:4)

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

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

  1. 您希望按照添加到数据库的顺序访问对象。但是,您可以通过多种方式轻松完成此操作。
  2. 1a上。您可以向每个实体添加字段。您可以将其设置为UUID或增加整数。

    1b中。你可以有一个实体,比如“EntityList”,它与“实体”有一个有序的一对多关系。

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

    这两个解决方案都可以让您按照添加的顺序访问Entity对象。

    1. 或者,你真的不关心你看到它们的顺序,但是你想要一致的订购。
    2. 2a上。添加primaryKey属性,并为其分配UUID。

      2B。使用有序的多对多关系。

      最后,如果您真的想要基于主键的访问,我建议您使用单独的sqlite数据库进行特殊的键控访问。然后,您可以将键与CoreData存储中对象的objectID相关联。