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

标签 ios macos core-data ios5 fetched-property

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

项目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/

    相关文章:

    ios - 使用约束从用户点击计算点坐标

    ios - 触摸/拖动快速通话

    iOS 在一个数组中搜索,通过另一个数组的索引匹配

    ios - 使用 CABasicAnimation 停止旋转图像

    macos - pip install xgboost with error Command "python setup.py egg_info"failed with error code 1 on mac (Python 2.7)

    iOS 核心数据 - 编辑对象后不会立即获取任何内容

    windows - Qt 跨平台 Windows & Mac : Font size

    c++ - 一个C++程序(用GCC编译)在Mac和Linux下的巨大性能差异

    xcode - 避免核心数据获取的重复结果

    ios - NSPredicate和SUBQUERY不起作用