gpt4 book ai didi

ios - 是否可以在 Core Data 中以只读方式返回 NSManagedObjects?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:11:55 28 4
gpt4 key购买 nike

我正在使用 Core Data 在我正在编写的模块中缓存服务器数据,并希望能够强制应用程序的其他部分不要修改该数据。

是否可以将我的 NSManagedObject 实例或用于获取它们的 NSManagedObjectContext 标记为只读?由于可以直接从对象访问上下文,因此消费者可以自由修改对象并调用 [obj.managedObjectContext save:&errror]

我已经看到很多关于创建完全只读存储的引用资料(如此处:Unable to create a readonly sqlite store in Core Data: Cocoa Error 260),但我不希望 NSPersistentStore 本身是只读的(我正在编写的模块应该是能够写入它)。

一种选择是将托管对象转换为具有相同属性的普通 NSObject 子类。但是后来我失去了一些 Core Data 可以做的好事,比如延迟加载等。

有什么想法吗?

最佳答案

NSManagedObject 本身不支持只读状态,所以这不是一件小事。不过,您可以做一些稍微有点棘手的事情来获得您描述的内容。

  • 如果您正在使用 NSManagedObject 的自定义子类,您可以向类(而不是实体)添加一个 bool 型 readOnlyMode 属性。然后您可以重写 setter 方法以在执行任何操作之前检查此属性。您将获得每个对象的只读行为,但没有什么可以阻止应用的其他部分仅更改该值。
  • 您可以对 NSManagedObjectContext 本身执行类似的操作。创建您自己的经常使用的子类,并添加您在调用 save: 时检查的类似 readOnlyMode 属性。但任何人都可以更改该标志。

或者你可以用苛刻的方式来做。在您自己的 Controller 类之一中使用 bool 型 readOnly 变量。然后监听 NSManagedObjectContextObjectsDidChangeNotification。如果该通知在只读模式下到达,则使应用程序崩溃。如果应用的其余部分是由表面上与您在同一团队的人开发的,这应该是完全合理的,因为它只会在应用开发期间在内部发生。

关于ios - 是否可以在 Core Data 中以只读方式返回 NSManagedObjects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33292161/

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