gpt4 book ai didi

ios - swift/Core Data - 为数据模型创建 "dummy"NSManagedObject ID(无需托管对象即可测试事物)

转载 作者:行者123 更新时间:2023-11-28 13:36:44 29 4
gpt4 key购买 nike

假设我在 CoreData 中有 2 个 NSManagedObject

class House: NSManagedObject {}
class Location: NSManagedObject {}

我也有这样的数据模型结构:

struct HouseModel {
var objectID: NSManagedObjectID
...
}

sruct LocationModel {
var objectID: NSManagedObjectID
...
}

对于每个加载的managedObject,我基本上使用它的属性来初始化一个新的模型结构以用于 UI 和其他东西(主要是 Collection View )

我必须在 structs 中具有 NSManagedObjectID 属性,以便能够更改结构所属的 managedObject。 (我知道我应该只使用 mainViewContext 来读取,而使用类似 persistentContainer.performBackgroundTask 的东西来写入。因此,我需要 NSManagedObjectID 来将对象加载到后台队列中)

这是可行的,但这种方法存在一个问题:如果没有 managed object,我无法初始化这些数据模型之一。当我想为 UI 测试或单元测试创​​建虚拟数据时,这很烦人。

我知道一个解决方案:创建一个只有一个实例的 Dummy managedObject 并将其 objectID 用于类似的东西。但我真的不喜欢这个。有没有更好/更方便的方式?

我的意思是,我很乐意完全删除 objectID 属性,以使 CoreData 与这些模型 structs 分开。但我看不出有办法做到这一点。我需要连接。

最佳答案

为了将 NSManagedObjects 传递给详细 View 以进行编辑,在新的主队列托管对象上下文中执行此操作通常很有用,这简化了您的 UI 访问并允许您在以下情况下丢弃上下文用户取消更改。

但这不是你问的。

您的问题是您想要标识一个托管对象,但不使用 NSManagedObjectID。为此,您可以改用 URL 属性。 NSManagedObjectID 有一个返回 URL 的 uriRepresentation()NSPersistentStoreCoordinator 可以使用 managedObjectID(为URI表示:)。因此,您可以将任何旧 URL 存储在结构中以用于测试目的,并且仍然可以安全地引用应用程序逻辑中的托管对象。

关于ios - swift/Core Data - 为数据模型创建 "dummy"NSManagedObject ID(无需托管对象即可测试事物),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516220/

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