gpt4 book ai didi

ios - 了解 NSCoreData 和 MSManagedObject 子类

转载 作者:行者123 更新时间:2023-11-29 02:55:26 25 4
gpt4 key购买 nike

我正在学习一些关于 NSCoreData 的知识,在向它介绍我现有的一些项目之前,我想验证一下我对核心原则的良好理解。据我了解,NSCoreData 通过从 NSManagedObject 而不是 NSObject 继承我们的 Model 类,使管理对象的本地存储(+之后的检索)变得更容易。

对吗?

那我有几个问题。假设我正在构建一个房地产应用程序,其核心模型对象是可以表示公寓、房屋和所有相关信息的 Property 类。目前,它在我的应用程序中作为 NSObject 的子类进行管理。

1) 我通过搜索查询从服务器检索属性,并编写了一个 initWithJson : 方法来填充每个实例。现在,如果我从 NSManagedObject 继承 Property,我将使用

创建我的实例
+(id)insertNewObjectForEntityForName:(NSString *)entityName 
inManagedObjectContext:(NSManagedObjectContext *)context

而且我仍然能够将 populateWithJson: 添加到我的类中以填充属性。

然后我会在当前的managedObjectContext中创建很多Property实例,如果我做一个save,它们会被存储在物理层。

如果我再次调用相同的网络服务,并检索相同的 JSON 内容,我将重新创建相同的托管对象。如何避免 [managedObjectContext save:&error] 调用的冗余,而不是多次物理存储单个真实生活属性的表示?

2) 假设我只想在物理上存储一些属性,例如只存储用户希望收藏的属性。

[managedObjectContext save:&error] 会将上下文中所有创建/修改/删除的托管对象保存到物理层,而不仅仅是我想要的那个。

如何实现?

我是否应该声明另一个上下文 (managedObjectContext2),移动我想存储在该上下文中的实例,然后在那个上下文中进行保存?

(我的意思是,我将有一个上下文来操作对象,从 JSON 创建实例并在 UI 中表示它们......还有第二个上下文来实际进行存储)

或者我应该存储所有对象,并添加一个 isFavorite BOOL 属性,然后使用该属性的谓词进行提取?

3) 该应用程序有一个通用的导航模式:UITableView 列出属性实例和所需的最少信息,然后继续详细 View 调用 web 服务以请求有关特定属性实例的更多信息(图像、全文描述)。

例如,仅当 property.fullDescription 为 nil 时才调用 web 服务,然后更新对象并将其与所有详细信息一起存储在本地,下次仅通过谓词在本地获取它是否是一个好习惯property.id ?创建后可能在服务器端更新的对象呢?

谢谢你的灯

最佳答案

1) 将服务器数据检索为临时形式(字典数组?),然后针对数组中的每个可能属性,检查核心数据中是否已有匹配的对象。如果这样做,请忽略它或更新任何已更改的属性;如果不是,则创建一个 Property 对象。

2) 确定要保留哪些内容以支持应用程序的功能。为不想保存的内容创建托管对象毫无意义。但是请注意,如果您同时需要 PropertyFavoriteProperty,那么 Core Data 支持子类。

3) 完全符合您的“业务规则”……。您需要多久更新一次本地数据?唯一的技术考虑可能是不在本地保留可按需重新创建的大型文件的指南。

关于ios - 了解 NSCoreData 和 MSManagedObject 子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23954467/

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