我创建了一个样板 CoreDataStack,我在使用 iOS 进行开发时会用到它。它与苹果在 appDelegate 中提供的代码几乎相同。我有一个关于如何将其传递给每个 View 的问题。根据我的阅读,两个主要选项是:
将上下文传递给需要它的每个类/ View 。这似乎是合乎逻辑的,但它会创建很多额外的代码,特别是如果您需要将上下文传递给多个 View ,而不需要使用它只是为了将它传递给需要的 View 。
每次需要时都引用 appDelegate 的上下文。大多数人说这是糟糕的编程,但它可以导致比选项 1 少得多的代码。
为什么我不能在每次需要时都创建一个新堆栈?我使用我的 CoreDataStack 类在 appDelegate 中创建了一个堆栈。为什么我不能在另一个类/ View 中再次创建它?我知道我需要确保它是在正确的线程中创建的,但我确信我可以找到一种方法来做到这一点。
最佳答案
大多数时候,我只是通过 AppDelegate 访问它。 CoreData 堆栈是我唯一一次使用 AppDelegate 来访问某些东西,否则我会像躲避瘟疫一样避开它!如果你不想这样做,你可以使用一个单独的 CoreDataStack 单例。无论哪种方式,您都可以将所有内容集中在一个地方。
每次使用核心数据堆栈时不重新创建的原因是,ManagedObjectContext 的每个实例都单独跟踪您的对象。如果您创建一个新对象并在单独的类中使用它操作对象,您的对象可能会彼此不同步,因为每个 MOC 都可以拥有自己对 ManagedObject 的内部引用。在 MOC 上调用 -save
并不能保证该对象会立即写入数据存储区,因此如果您对具有两个不同类中的两个不同 MOC 的对象进行更改,您可能会得到 object您必须合并的冲突。
关于ios - 核心数据堆栈的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25431970/