通过 NSFetchedResultsController 访问非持久变量 swift iOS

Accessing non-persistent variable through NSFetchedResultsController swift iOS

是否可以通过NSFetchedResultsController访问非持久变量?

我正在从核心数据创建联系人实体。
我向其中添加了一个我不想保留的变量,我只希望这个变量在应用程序活动范围内,然后丢弃。

import CoreData

class Contact: NSManagedObject {

// Insert code here to add functionality to your managed object subclass

    var incomingRequest = false  <———————— temporary variable

    override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) {
        super.init(entity: entity, insertIntoManagedObjectContext: context)
    }
}

我正在使用 NSFetchedResultsController 在 table 视图中显示所有联系人。
当我设置incomingRequest时,NSFetchedResultsController不会触发didChangeObject委托,我能理解,很明显。
当我从 NSFetchedResultsController 获取联系人并尝试访问 incomingRequest 时,它总是给我 false。

是否有任何解决方法可以通过获取 NSFetchedResultsController 来获取先前设置的 incomingRequest 值?
或者在核心数据中也保存 incomingRequest 是唯一的解决方案?

我知道核心数据中的 transient 属性,但我想使用 ivars,假设将来非持久属性会增加。

提前致谢:)
欢迎提出任何建议!

Is there any workaround to get the previously set value of incomingRequest by fetching NSFetchedResultsController?

否,因为没有任何先前设置的值。如果多次执行相同的提取,则不能保证获得相同的对象实例。如果您正在从不同的托管对象上下文中进行提取,那么您 保证 不会获取相同的对象,这一点尤其正确。它们在持久存储中代表相同的实例,但在内存中它们不是同一个对象。

因此,您在一个对象上将 incomingRequest 设置为 true,但随后您使用了抓取结果控制器并获得了另一个对象。但是您还没有在这个其他对象上设置 incomingRequest 的值,因此它获得默认值。

是否在您的数据模型中包含 incomingRequest 取决于该值的含义以及您如何使用它。这可能是正确的答案。您可能更愿意做一些事情,比如保留一组 NSManagedObjectID 作为传入请求集合,这样您就可以随时确定是否应将获取的对象视为具有传入请求。