【问题标题】:NSIncrementalStore to-one relationship fault fires immediately (eagerly loaded?)NSIncrementalStore 一对一关系错误立即触发(急切加载?)
【发布时间】:2014-12-09 15:48:18
【问题描述】:

我注意到,当执行获取请求时,一对一关系的错误会立即触发,即使我没有访问该关系。特别是,方法 newValueForRelationship:forObjectWithID:withContext:error: 中的断点会立即在 NSIncrementalStore 子类中命中。

- (id)newValueForRelationship:(NSRelationshipDescription *)relationship
          forObjectWithID:(NSManagedObjectID *)objectID
              withContext:(NSManagedObjectContext *)context
                    error:(NSError **)error

https://developer.apple.com/library/mac/documentation/CoreData/Reference/NSIncrementalStore_Class/index.html#//apple_ref/occ/instm/NSIncrementalStore/newValueForRelationship:forObjectWithID:withContext:error:

只有当我按预期访问关系时,才会触发断点(延迟加载)。

有人可以帮忙吗?

【问题讨论】:

    标签: ios core-data fault nsincrementalstore


    【解决方案1】:

    这就是设计你自己的 NSIncrementalStore。 请通过docIncremental Store Programming Guide

    以下是该指南的摘录:

    如果后备数据存储很容易建立一对一关系 可用,您的增量存储在 newValuesForObjectWithID:withContext:error:。如果您的应用和数据 当所有关系获取都被延迟时,存储效率更高, 您的商店可能会将它们退回 newValuesForRelationship:forObjectWithID:withContext:error:.

    【讨论】:

    • 我明白了,但我不确定这如何回答我的问题。
    • 尝试在 newValuesForObjectWithID: 中设置断点,看看是否命中相同的一对一关系,希望你能得到答案。
    • 即使没有访问关系,每个对象都会命中该断点。这是我的理解。而且,我能够验证这是行为。
    • 它是否命中了您正在验证的同一对一关系?如果是,那么您可以推断出 Core Data 试图使一对一的关系对象随时可用。
    • newValuesForObjectWithID:withContext:error: 未命中关系。但是,根据文档,它允许设置一对一的关系。如果我在 newValuesForObjectWithID:withContext:error: 中将一对一关系设置为 [NSNull null],则不会调用 newValuesForRelationship:forObjectWithID:withContext:error: 方法。到目前为止,CoreData 似乎希望通过 newValuesForRelationship:forObjectWithID:withContext:error: 或 newValuesForObjectWithID:withContext:error: 轻松实现一对一关系,但是,它不能像多对关系一样被推迟。
    猜你喜欢
    • 2021-12-01
    • 1970-01-01
    • 2013-10-07
    • 2017-09-15
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多