【发布时间】:2011-12-07 17:27:52
【问题描述】:
据我所知,CoreData 在添加记录时不会保留记录的顺序。因此,如果我们想在 CoreData 中存储对象数组,我们应该将 orderId 之类的字段添加到对象并手动填充它。但是看起来底层的sqlite基础存储了记录的索引,所以可能有一种方法可以在不添加额外字段的情况下存储有序对象?
【问题讨论】:
标签: iphone objective-c cocoa-touch core-data
据我所知,CoreData 在添加记录时不会保留记录的顺序。因此,如果我们想在 CoreData 中存储对象数组,我们应该将 orderId 之类的字段添加到对象并手动填充它。但是看起来底层的sqlite基础存储了记录的索引,所以可能有一种方法可以在不添加额外字段的情况下存储有序对象?
【问题讨论】:
标签: iphone objective-c cocoa-touch core-data
简短回答:不。 长答案:
为了保存订单,必须存储订单信息。它可以是隐式的,使用 ShiShi 建议的现有属性的排序描述符。或者,您可以添加一个新属性,以明确维护实例的排序顺序。
如果客户端代码没有定义一个隐式主键 rowId,SQLite 会维护它。但是如果客户端代码定义了一个整数主键,SQLite 将使用它作为它的 rowId。换句话说,尝试聪明并使用SQLite的rowId在空间或时间上没有任何优势。请注意,您可以告诉 Core Data 您的属性应该被索引。 Core Data 可能会也可能不会定义另一个主键。
试图依赖 Core Data 如何实现其持久存储是一种**BAAAAD** 想法:您的代码将破坏与其他存储的兼容性,过去现在或将来,并且可能会随着未来的更新而中断。
您可能已经注意到,Core Data 现在支持与 Mac OS X Lion 或 iOS 5 的有序关系。底层实现很可能使用特定的附加列来存储排序信息。
【讨论】: