据我所知,CoreData不会保留添加记录的顺序。因此,如果我们想在CoreData中存储对象数组,我们应该将orderId这样的字段添加到object并手动填充它。但它看起来底层sqlite基础存储索引的记录,所以可能有一种方法来存储有序对象而不添加额外的字段?
答案 0 :(得分:8)
简短回答:不。 答案很长:
为了保存订单,必须存储订单信息。它可以是隐式的,使用ShiShi建议的现有属性上的排序描述符。或者,您可以添加新属性,以明确维护实例上的排序顺序。
如果没有客户端代码定义,SQLite会维护一个隐式主键rowId。但是,如果客户端代码定义了一个整数主键,SQLite将使用它作为其rowId。换句话说,在空间或时间上尝试聪明并使用SQLite的rowId没有任何优势。请注意,您可以告诉Core Data您的属性应该被编入索引。核心数据可能会也可能不会定义另一个主键。
尝试依赖Core Data如何实现其持久存储是 ** BAAAAD ** 的想法:您的代码将破坏与其他商店的兼容性,过去现在或将来,并可能会在未来的更新中中断。
您可能已经注意到Core Data现在支持与Mac OS X Lion或iOS 5的有序关系。底层实现最有可能使用特定的附加列来存储订购信息。