从核心数据中随机获取

时间:2017-11-14 11:57:49

标签: ios core-data swift3

  1. 我有一个实体的n个对象。

  2. 我想从同一个实体中获取30个随机对象。

    我正在使用核心数据,swift 3.有人能帮我解决这个问题吗?

  3. 谢谢,

1 个答案:

答案 0 :(得分:2)

这将需要一个额外的步骤,因为Core Data没有任何内置支持随机选择。您需要具有一些唯一属性,为该属性选择您自己的值的随机子集,然后使用这些值获取托管对象。

首先,您需要一个具有唯一值的托管对象属性。任何属性都可以,但数字属性将更快。让我们假设您有一个名为myUniqueID的整数属性,它具有唯一值。

  • 执行获取请求以获取此属性的所有当前值。您只需要此特定属性的值,因此请将获取结果类型设置为NSFetchRequestResultType.dictionaryResultType,并将获取请求的propertiesToFetch设置为仅包含myUniqueID。结果将是一个字典数组,每个字典包含单个值myUniqueID
  • 添加您自己的逻辑,从此结果中选择30个随机值。将它们收集在一个数组中。
  • 执行第二次获取请求,这次是获取托管对象而不是字典。如果您的随机ID数组被称为uniqueIDArray,请使用NSPredicate(format: "myUniqueID in %@", uniqueIDArray)
  • 之类的谓词