MagicalRecord defaultContext间歇性地变为零

时间:2014-04-19 16:07:16

标签: objective-c ios7.1 magicalrecord-2.2

我在我的iPad应用程序中使用MagicalRecord;我有一行代码,间歇地抛出异常:

  

+ entityForName:nil不是搜索实体名称的合法NSManagedObjectContext参数...

我理解是因为NSManagedObjectContext是 nil 。应用程序运行了很长一段时间,直到错误由这行代码触发,其他类似代码(使用不同的实体):

    [apptDataArray addObjectsFromArray:[AppointmentInfo MR_findAllWithPredicate:predicate]];

NSManagedObjectContext在AppDelegate.h中定义为

NSManagedObjectContext *defaultContext;

并在AppDelegate.m中进一步

    defaultContext = [NSManagedObjectContext MR_defaultContext]; 

在整个应用程序中使用它。在我问过的另一个SO问题中,Saul Mora说了这个:

  

通过每次保存时创建新的上下文,而不是重复使用上下文,您将保证不会跨线程,并且不会在1%的时间内使应用程序崩溃。

我的保存是否会以某种方式破坏 defaultContext 对象?如果是这样,为每个MR方法调用创建 new defaultContext是否明智?

1 个答案:

答案 0 :(得分:1)

  

并在AppDelegate.m中进一步

defaultContext = [NSManagedObjectContext MR_defaultContext]; 

......这可能是AOK,因为你很可能在主线上。

  

在整个应用程序中使用它。

...这不太好,因为“整个应用程序”意味着您可能在而不是主线程。

您可能希望在特定位置使用[NSManagedObjectContext MR_contextForCurrentThread]

查看MagicalRecord中的[NSManagedObjectContext MR_defaultContext][NSManagedObjectContext MR_contextForCurrentThread]做什么(在您的代码中输入,然后通过cmd点击它以便快速找到它)。您将看到MR_contextForCurrentThread在主线程上使用defaultContext ,并在其他线程上创建一个新的上下文作为defaultContext的上下文。