gpt4 book ai didi

ios - 核心数据中的获取的属性返回不正确的计数

转载 作者:行者123 更新时间:2023-12-01 19:24:31 31 4
gpt4 key购买 nike

我有一个看起来像这样的核心数据关系

项目A->>项目B

其中itemA有很多itemB。我想使用一个提取的属性,该属性使我可以获取与itemA关联的所有itemB关联,其中itemA的int32 status属性设置为“2”。因此,我在数据建模器中创建了一个具有以下内容的提取属性:

获取的属性:completedItem
谓词:status == 2
目的地:itemB

当我第一次尝试时,我拿回了物品,并认为一切都很好,然后又发现了奇怪的行为,当我仔细观察时,退回的物品与实际的itemB数量无关。 itemA对象。更奇怪的是,返回类型是NSFaultingMutableArray。这是一个简单的例子

  • ItemA具有itemB的0
  • 对ItemA的NSSet属性ItemA具有的筛选谓词搜索返回0
  • 获取的属性“completedItem”返回ItemB的4
  • 返回的类型是NSFaultingMutableArray

  • 现在这在我脑子里很奇怪,真的没有任何意义。有任何想法吗?

    更新1:

    似乎这里列出的fetched属性获取了核心数据必须提供的所有与谓词匹配的ItemB对象,即使它与所讨论的ItemA没有关联也是如此

    最佳答案

    这是本期所有怪异问题的答案:

    1)提取的属性确实不是仅为ItemA返回ItemB对象。为了使这种情况发生,您必须在获取的属性谓词中添加类似的内容

    status == 2 AND ItemA == $FETCH_SOURCE

    2)从“获取的属性”文档中:

    延迟评估获取的属性,然后将其缓存。

    如果目标实体中的对象已更改,则必须重新评估获取的属性以确保它是最新的。您可以使用refreshObject:mergeChanges:手动刷新属性-这将导致在下次触发对象故障时再次执行与此属性关联的获取请求。

    因此基本上使用 refreshObject:mergeChanges手动刷新对象以重新加载获取的属性。您可以通过添加刷新方法或对子类NSManagedObject中的KVC get方法进行一些花哨的重写来实现此目的。

    话虽这么说,这里的其他人(Rob Booth,Grady Player)通过完全绕过获取的属性而具有其他有效的解决方案。虽然这些都是荒谬的

    关于ios - 核心数据中的获取的属性返回不正确的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8495959/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com