【问题标题】:Can I access CoreData objects by index?我可以按索引访问 CoreData 对象吗?
【发布时间】:2016-11-07 15:13:13
【问题描述】:

我将 CoreData 用作我的应用数据的持久存储,但希望通过索引访问我的数据模型中的元素,而不是每次都遍历整个集合。

例如,如果我有以下形式的数据:

  1. “乔治”
  2. “比尔”
  3. “乔治”
  4. “巴拉克”
  5. “唐纳德”

我希望能够更新元素而无需每次都搜索集合。

如果数据在数组中,这很容易,即:

Presidents[5] = "Hilary"

除了

之外,在CoreData中似乎没有简单的方法可以做到这一点
for president in Presidents{
    if(president.id == 5){
        president.name = "Hilary"
     }
}

对于大型数据集,这将变得非常昂贵。我错过了什么吗?

【问题讨论】:

  • 只需将托管对象加载到数组中即可。
  • @johnelemans 如此简单!它也有效。

标签: ios swift core-data


【解决方案1】:

感谢@JohnElemans,但他发表了评论而不是答案,所以我发布这个是为了其他人的利益。

将对象从托管对象上下文加载到数组(或字典)中,通过引用传递它们。

在上面的例子中,假设在presidents[5]中有一个对象,可以通过常规方式访问它。

presidents[5] = "Hilary"

【讨论】:

    【解决方案2】:

    如果您使用 CoreData,您应该通过获取来检索数据对象。这允许您仅加载必要的内容。在这种特殊情况下,通过 CoreData 的 objectid 检索有它自己的方法。否则你会想要使用谓词来获取。

    此链接完成您正在寻找的内容(快速):How can I get core data entity by it's objectID?

    在 Obj-c 中:How to get Core Data object from specific Object ID?

    我无法找到有关实现的信息,但由于表内存大小是固定的,我认为检索机制可能类似于数组,但会增加访问磁盘的开销。您不想手动检索所有对象并自己查找 objectid。

    【讨论】:

    • 对不起,我应该说清楚,我自己提供了 ID,并希望使用该 ID。
    • 哦,我明白了。那么你应该使用我答案的第一部分。您获取对象,更改它们并保存。这可能会有所帮助:jamesonquave.com/blog/core-data-in-swift-tutorial-part-2。特别相关的部分在下半部分,“我们将创建一个 NSPredicate,它使用字符串来表示任何对象必须满足才能通过查询的要求”。你的谓词看起来像: let predicate = NSPredicate(format: "id == 5")
    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 2017-04-23
    • 2020-12-03
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多