【问题标题】:iPhone Core Data Fetch Primary KeyiPhone核心数据获取主键
【发布时间】:2012-04-14 11:42:59
【问题描述】:

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

【问题讨论】:

  • 您能否发布一张图片或您的 Xcdatanodel,因为您的问题有点不清楚?
  • Core Data 中的主键?
  • 您好 Nikita,我正在将 .Sqlite 文件写入文档目录。
  • 在那个文件中当我添加一些记录时,表格会为所有记录创建主键。我只需要使用这个主键来对我的数据进行排序。
  • 糟糕。我认为您不能在文档目录中使用该 SQLite 文件。它供 Core Data 内部使用。您是否正确引用了核心数据文档?

标签: iphone core-data primary-key


【解决方案1】:

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

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

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

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

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

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

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

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

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

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

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

【讨论】:

  • 谢谢乔迪,我有一个替代网络解决方案。但我只是想知道这是否可能?感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2010-10-28
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 2010-12-16
  • 2015-01-04
相关资源
最近更新 更多