gpt4 book ai didi

objective-c - 传递带有核心日期 + 神奇记录的 ManagedContext

转载 作者:行者123 更新时间:2023-12-03 17:44:24 26 4
gpt4 key购买 nike

目前我正在通过在 ViewDidLoad 中执行以下操作来设置我的 NSManagedContext:

.h

@property (nonatomic,strong) NSManagedObjectContext* managedObjectContext;

.m
 viewDidLoad {
_managedObjectContext = [NSManagedObjectContext MR_contextForCurrentThread];
}

问题 : 我是否必须将相同的托管上下文传递给我想要访问此 ManagedContexts 的所有后续 View Controller ,或者我可以编写一个新的 @property为每个新 View Controller 的 .h 设置每个新的 View Controller ManagedObject 在 .m 中使用 _managedObjectContext = [NSManagedObjectContext MR_contextForCurrentThread];

最佳答案

当 Core Data 堆栈建立时,MagicalRecord 会创建一个“主队列并发类型”的默认上下文。如果你所有的 View Controller 都使用这个默认上下文,你可以

  • (1) 将上下文从一个 View Controller 传递到下一个 View Controller ,
  • (2) 调用[NSManagedObjectContext MR_defaultContext]在每个 View Controller 中获取
    默认上下文,

  • 你也可以,就像你现在做的那样
  • (3) 调用[NSManagedObjectContext MR_contextForCurrentThread]viewDidLoad获取默认上下文。

  • 但最后一种方法之所以有效,是因为 viewDidLoad总是在主线程上调用并且 MR_contextForCurrentThread在这种情况下返回默认上下文。

    但是, MR_contextForCurrentThread如果从非主线程调用,则创建额外的上下文(私有(private)队列并发类型)
    线程,并将上下文与固定的 NSThread 相关联.但是,正如@casademora 正确所说,这样的私有(private)队列上下文并不总是为每个队列使用相同的线程
    手术。所以 MR_contextForCurrentThread不应在非主线程上使用,
    它与 MR_defaultContext 相同如果从主线程调用。

    因此,即使它适用于您的情况,您也应该避免方法(3)。无论您选择
    方法(1)或(2)纯粹是个人喜好问题。

    如果您需要其他上下文,例如对于后台导入操作,您可以调用
    例如 MR_contextMR_contextWithStoreCoordinator并将该上下文传递给任何地方
    这是必需的。

    关于objective-c - 传递带有核心日期 + 神奇记录的 ManagedContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17814656/

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