这是核心数据的一个新手问题,因为我在swift中开始使用ios。
我不理解核心数据的机制......我如何操纵,我的意思是实例化实体(托管对象)而不将它们“附加”到上下文中?
假设我有一个api,它会返回一个汽车列表。我想将我的api数据解析为Car对象列表。现在我想在进行任何数据库操作之前排除所有红色汽车。
但是,如果我将我的汽车实例化为托管对象,则它们会直接附加到上下文中,因此,如果我在其上调用save,它将在我创建的所有实体中执行!
创建一个新的汽车对象并不意味着我想对我的数据库进行任何操作!
答案 0 :(得分:0)
插入到上下文中然后在保存上下文之前删除的ManagedObject不会影响数据库。
答案 1 :(得分:0)
托管对象仅存在于上下文中。你不能孤立地创建它们。
正如@Jon Rose所提到的,仅仅因为你将它们插入上下文并不意味着你必须保存它们。如果在保存上下文之前再次删除它们,则不会存储它们。
您可能希望在解析操作期间使用单独的上下文。您可以创建一个新的托管对象上下文,并将其设置为主要托管对象上下文的子上下文(通过在新创建的托管对象上下文中设置parentStore
属性)。
这样做的好处是,您可以保证您的应用的其他任何区域都不会尝试在不合适的时间拨打save:
。在解析器中,创建新上下文并设置其父级。创建所有对象,进行所需的所有修改/删除,然后调用save。当您在子托管对象上下文中调用save时,然后只有它的所有更改都被推送到父级。 (请注意,在子上下文中调用save实际上并不会将内容保存到数据库中 - 您需要在子上下文中调用save,然后按顺序调用父上下文中的save,以便保存到数据库中。)