从核心数据存储中选择随机条目
Posted
技术标签:
【中文标题】从核心数据存储中选择随机条目【英文标题】:Selection of random entries from a Core Data Store 【发布时间】:2009-07-13 09:52:26 【问题描述】:有没有办法从 Core Data 存储中选择固定数量的随机条目?我刚刚开始使用 Core Data,并且已经在这个问题上停留了很长一段时间。
作为最后的手段,我可以在内存中查询大量条目,然后随机选择一个固定数字。
另外,有没有办法指定要在核心数据存储上执行的自定义 SQL 语句?我意识到这不太可能,因为商店的底层实现也可能是一个 XML 文件。
【问题讨论】:
【参考方案1】:嗯……也许
[[[managedObjectsContext registeredObjects] allObjects] objectsAtIndex:r]
其中 r 是介于 0 和对象数减一之间的随机整数?一点也不高效,但又快又容易。
编辑:如果您想在选择的对象之间选择随机对象,则创建一个描述您的对象选择的提取请求,并对查询结果执行与上述相同的操作:
[[[managedObjectsContext executeFetchRequest:request error:&error] objectAtIndex:r]
【讨论】:
并非我商店中的所有托管对象都属于同一类型。我想要一个特定类型的随机条目。在所有注册对象中选择一个随机对象可能不起作用。我在我的条目中使用身份字段。幸运的是,我知道没有缺少身份值。我只是随机选择身份值并使用相同的值指定一个 NSPredicate 。虽然这目前有效,但必须有更好的方法。不过感谢您的帮助。【参考方案2】:关于您的第二个问题,这是核心数据的要点之一,即抽象出底层数据存储。使用 NSPredicate 和 NSExpressions 构建获取请求,或者将其存储在数据模型中是查询存储的唯一方法。
【讨论】:
【参考方案3】:不确定,但我认为 Core Data 会为您将数据放入 NSSet。所以你也许可以使用 -[NSSet anyObject]。我还没有测试过这个或任何东西。
【讨论】:
-anyObject 从开发人员的角度来看是随机的,因为您无法控制它,但实际上它只是内部数据存储根中的任何对象,因此它将始终如一相同的对象,直到集合的内容发生变化。以上是关于从核心数据存储中选择随机条目的主要内容,如果未能解决你的问题,请参考以下文章