ios - 核心数据堆栈的多个实例

标签 ios objective-c core-data swift nsmanagedobjectcontext

我创建了一个样板 CoreDataStack,我在使用 iOS 进行开发时会用到它。它与苹果在 appDelegate 中提供的代码几乎相同。我有一个关于如何将其传递给每个 View 的问题。根据我的阅读,两个主要选项是:

  1. 将上下文传递给需要它的每个类/ View 。这似乎是合乎逻辑的,但它会创建很多额外的代码,特别是如果您需要将上下文传递给多个 View ,而不需要使用它只是为了将它传递给需要的 View 。

  2. 每次需要时都引用 appDelegate 的上下文。大多数人说这是糟糕的编程,但它可以导致比选项 1 少得多的代码。

  3. 为什么我不能在每次需要时都创建一个新堆栈?我使用我的 CoreDataStack 类在 appDelegate 中创建了一个堆栈。为什么我不能在另一个类/ View 中再次创建它?我知道我需要确保它是在正确的线程中创建的,但我确信我可以找到一种方法来做到这一点。

最佳答案

大多数时候,我只是通过 AppDelegate 访问它。 CoreData 堆栈是我唯一一次使用 AppDelegate 来访问某些东西,否则我会像躲避瘟疫一样避开它!如果你不想这样做,你可以使用一个单独的 CoreDataStack 单例。无论哪种方式,您都可以将所有内容集中在一个地方。

每次使用核心数据堆栈时不重新创建的原因是,ManagedObjectContext 的每个实例都单独跟踪您的对象。如果您创建一个新对象并在单独的类中使用它操作对象,您的对象可能会彼此不同步,因为每个 MOC 都可以拥有自己对 ManagedObject 的内部引用。在 MOC 上调用 -save 并不能保证该对象会立即写入数据存储区,因此如果您对具有两个不同类中的两个不同 MOC 的对象进行更改,您可能会得到 object您必须合并的冲突。

关于ios - 核心数据堆栈的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25431970/

相关文章:

ios - 本地化具有自定义字符串的 NSDateFormatter?

ios - 核心数据迁移崩溃

iphone - 动态地将 UITableView 分成任意部分?

objective-c - 将一对多核心数据关系的前 5 个值绑定(bind)到文本字段

ios - iOS 应用程序需要动态字体吗?

iphone - CGPDF文档中的突出显示

ios - 获取唯一对象数组

ios - 在深度链接参数中将图像作为字符串传递

ios - LongPressGestureRecognizer 从 View 背后识别

ios - iOS Swift Web Socket SRWebSocket设置响应超时