我不使用核心数据永久存储在所有的 ,我使用的是内存中的存储类型,因为我真的只需要核心数据为其类似数据库的好处。

在某些情况下,我将加载视图控制器并从API获取数据,并使用API​​的响应对象填充Core Data,然后通过NSFetchedResultsController填充视图控制器。

但是,我将转到另一个视图控制器,完全不需要上一个视图控制器,并进行新的API调用,并需要使用那些响应对象填充Core Data。

我的问题是,当我引入新旧玩具时,我的旧旧玩具仍然存在。 我如何迅速告诉旧的消失,而让新的让路?

我尝试手动删除所有条目,如该答案所示,但如果我在此之后直接加载新条目,则会使我的应用程序崩溃。

有没有更好的方法可以做到这一点?

===============>>#1 票数:1

由于您使用的是内存存储,因此可以跳过人们描述的清除持久性存储的所有步骤。 内存中的存储是对象,因此您摆脱它们的方式与摆脱任何其他对象的方式相同,即通过将对该对象的任何引用设置为nil并让ARC负责清理它们。 然后,您可以创建一个没有数据的全新商店,并进行处理。

稍微复杂一点,因为您需要处理获取的所有托管对象,但是如果您不保留任何引用,它们也会消失。 它仍然只是让对象像其他任何对象一样被释放。

使用内存存储的最简单方法是:

  1. 将对与持久性存储关联的任何对象的任何引用设置为nil。 这包括所有托管对象,托管对象上下文以及持久性存储和持久性存储协调器。

  2. 创建一个新的持久性存储,持久性存储协调器和托管对象上下文。 以与您第一次创建时相同的方式执行此操作。

没有步骤3,也无需显式删除持久性存储的所有内容。

===============>>#2 票数:0

这是我重置核心数据的方式:

//  reset core data
[managedObjectContext lock];

NSPersistentStoreCoordinator *persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator;

for(NSPersistentStore *persistentStore in persistentStoreCoordinator.persistentStores) 
{
    [persistentStoreCoordinator removePersistentStore:persistentStore error:nil];
    [[NSFileManager defaultManager] removeItemAtPath:persistentStore.URL.path error:nil];
}

[managedObjectContext unlock];

我使用这是我的应用程序以清除所有内容并重新开始。 希望这是您想要的。 抱歉,如果不是。

  ask by user212541 translate from so

未解决问题?本站智能推荐: