我可以通过索引访问CoreData对象吗?

时间:2016-07-05 17:25:34

标签: ios swift core-data

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

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

  1. "乔治"
  2. "比尔"
  3. "乔治"
  4. "美国总统"
  5. "唐纳德"
  6. 我希望每次都能在不搜索集合的情况下更新元素。

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

    Presidents[5] = "Hilary"
    

    除了

    之外,在CoreData中执行此操作似乎并不容易
    for president in Presidents{
        if(president.id == 5){
            president.name = "Hilary"
         }
    }
    

    对于大型数据集来说会非常昂贵。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

归功于@JohnElemans,但他发表了评论而不是答案,所以我发布这个给别人带来好处。

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

在上面的例子中,假设在总统[5]中有一个对象,可以用传统的方式访问它。

presidents[5] = "Hilary"

答案 1 :(得分:0)

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

此链接可以完成您所寻找的内容(在swift中):How can I get core data entity by it's objectID?

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

我无法找到有关实现的信息,但随着表内存大小的修复,我认为检索机制很可能与数组类似,但增加了访问磁盘的开销。您不想手动检索所有对象并自己找到objectid。