【问题标题】:Random fetch from core data从核心数据中随机获取
【发布时间】:2018-04-27 08:55:31
【问题描述】:
  1. 我有 n 个实体的对象。

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

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

谢谢,

【问题讨论】:

标签: ios core-data swift3


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,有没有其他办法?
  • @DeepakKumarSahu Tom 解决方案的一个小变化是指定 .managedObjectIDResultType,这将为您提供一个 NSManagedObjectID 数组,您可以从中随机选择 30 个。随后获取的相应谓词将是“自我进入 %@“。这避免了更改模型,但仍需要两次提取。
  • @DeepakKumarSahu 可能,但不太可能有更简单的。
猜你喜欢
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多