gpt4 book ai didi

ios - 使用 NSManagedObject 子类来传输持久性和非持久性数据

转载 作者:可可西里 更新时间:2023-11-01 03:47:21 25 4
gpt4 key购买 nike

我正在考虑如何使用一些核心数据的 NSManagedObject 子类来处理持久数据和非持久数据。

假设您有一个食谱应用程序,它显示您自己来自 CoreData 的食谱列表,并且在同一个应用程序中,您还可以搜索其他用户的食谱。这些其他用户的食谱当然来自 API,我们不想将它们保存到核心数据中。但我们想要的是我们的配方细节 View Controller ,无论是给定持久配方还是非持久配方,它都表现得一样。我自然地认为我们应该在我们的数据周围使用相同的对象包装器,让我们的 View Controller 对数据的来源视而不见。

问题是 NSManagedObject 的子类不能手动初始化,必须插入到上下文中。这对我们其他用户的食谱不利。另一方面,对于我们自己的食谱,我们需要将这些对象插入到上下文中。

我有几个解决方案,但我真的很想了解你们对这个问题的看法。

你会说这是一些实现问题,应该通过将两个数据对象包装到一个对象中来解决吗?例如,通过覆盖所有 getter 和 setter 来处理 coredata 对象和 NSDictionary 对象?

或者这是一个架构问题,您可以通过嵌套 NSManagedContext 或使用多个持久存储(一个在内存中,另一个在 Sqlite 中)来解决它?

最佳答案

实际上,您可以创建 NSManagedObject 实例,而无需将它们插入到上下文中。只需将 nil 作为托管对象上下文参数传递即可。做这样的事情:

NSEntityDescription *myRecipeEntity = [NSEntityDescription entityForName:@"MyRecipeEntity" inManagedObjectContext:[self managedObjectContext]];
MyRecipeClass *recipe = [[MyRecipeClass alloc] initWithEntity:myRecipeEntity insertIntoManagedObjectContext:nil]];

现在您有一个不在任何上下文中的食谱实例。

如果您稍后想将其添加到上下文中:

[[self managedObjectContext] insertObject:recipe];

不想插就扔掉。

关于ios - 使用 NSManagedObject 子类来传输持久性和非持久性数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15954317/

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