我有一个看起来像这样的核心数据关系
项目A->>项目B
其中itemA有很多itemB。我想使用一个提取的属性,该属性使我可以获取与itemA关联的所有itemB关联,其中itemA的int32 status属性设置为“2”。因此,我在数据建模器中创建了一个具有以下内容的提取属性:
获取的属性:completedItem
谓词:status == 2
目的地:itemB
当我第一次尝试时,我拿回了物品,并认为一切都很好,然后又发现了奇怪的行为,当我仔细观察时,退回的物品与实际的itemB数量无关。 itemA对象。更奇怪的是,返回类型是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/