【问题标题】:Selection of random entries from a Core Data Store从核心数据存储中选择随机条目
【发布时间】:2009-07-13 09:52:26
【问题描述】:

有没有办法从 Core Data 存储中选择固定数量的随机条目?我刚刚开始使用 Core Data,并且已经在这个问题上停留了很长一段时间。

作为最后的手段,我可​​以在内存中查询大量条目,然后随机选择一个固定数字。

另外,有没有办法指定要在核心数据存储上执行的自定义 SQL 语句?我意识到这不太可能,因为商店的底层实现也可能是一个 XML 文件。

【问题讨论】:

    标签: iphone objective-c core-data


    【解决方案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 从开发人员的角度来看是随机的,因为您无法控制它,但实际上它只是内部数据存储根中的任何对象,因此它将始终如一相同的对象,直到集合的内容发生变化。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-12-01
      • 1970-01-01
      相关资源
      最近更新 更多