*** 尝试截断时 +[NSManagedObjectContext MR_defaultContext] 中的断言失败

Posted

技术标签:

【中文标题】*** 尝试截断时 +[NSManagedObjectContext MR_defaultContext] 中的断言失败【英文标题】:*** Assertion failure in +[NSManagedObjectContext MR_defaultContext] when trying to truncate 【发布时间】:2013-07-29 07:22:25 【问题描述】:

MagicalRecord 2.0.7 版出现异常

每当我启动应用程序时,它都会崩溃并出现以下异常:

*** Assertion failure in +[NSManagedObjectContext MR_defaultContext]

我正在像这样配置 coredata:

在appdelegate didFinishLaunchingWithOptions 方法中:

[MagicalRecord setupCoreDataStack];

在 appdelegate applicationWillTerminate:

[MagicalRecord cleanUp];

我注意到只有当我尝试截断实体中的所有记录时才会发生崩溃:

NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];

[Song MR_truncateAllInContext:localContext];

我错过了什么吗?上面采用的方法是不是错了?

编辑

崩溃发生在这一行:

+ (NSManagedObjectContext *) MR_defaultContext

    @synchronized (self)
    
        NSAssert(defaultManagedObjectContext_ != nil, @"Default Context is nil! Did you forget to initialize the Core Data Stack?");//this line 
        return defaultManagedObjectContext_;
    

在 NSMnagedObjectContext+MagicalRecord.m 文件中

【问题讨论】:

你连接调试器了吗?它停在哪条线? 崩溃发生在NSManagedObjectContext+MagicalRecord.m文件上,请看我的更新 该行似乎很清楚,错误在于未设置默认上下文。查看您的控制台并确保正在设置默认上下文。尝试改用setUpCoreDataStackWithStoreNamed: 我已经尝试过了,但没有解决我的问题。我在 MR repo 上打开了一个问题:github.com/magicalpanda/MagicalRecord/issues/524 你找到问题了吗? 【参考方案1】:

将您的核心数据设置 [MagicalRecord setupCoreDataStackWithStoreNamed:@"Model"]; 置于应用委托方法之上。

【讨论】:

【参考方案2】:

所以,如果你指定了一个上下文(localContext)并且你在 defaultContext 访问器中崩溃了,那么还有其他事情发生。设置堆栈后,默认上下文不应为 nil。您是否在初始化后自行验证过?尝试使用

+[MagicalRecord currentStack]

查看是否一切都已正确设置。

在 truncateAllInContext: 方法中要检查的一件事是忽略您的本地上下文并只要求默认值吗?如果是这样的话,那么这是MagicalRecord中的一个错误,可能会在更新的版本中修复(最新的是2.1)

【讨论】:

【参考方案3】:

是的,如果可以的话,升级 MagicalRecord。我遇到了在 2.1 中消失的各种问题。至少其中一个是 MagicalRecord 设法解决的 Core Data 中的错误。

【讨论】:

嗨 Otto,你能发给我固定版本的链接吗,我拉了我认为包含最新版本 2.1 的主存储库,对吗? 不知道。我一直在使用 Cocoapods,这使得更改版本变得微不足道。我希望 master 有 2.1 或更好的版本,但不确定......它可能是不稳定的东西,据我所知,它是特定于项目的。

以上是关于*** 尝试截断时 +[NSManagedObjectContext MR_defaultContext] 中的断言失败的主要内容,如果未能解决你的问题,请参考以下文章

Swift NSFetchedResultsController 嵌套对象的最佳实践

NSManagedObjectContext,声明在哪里?

不能在 NSManagedObject 中存储双倍

NSManagedObjectModel 用 mergeModelFromBundles 初始化:nil 在 SenTestCase 中找不到模型

MagicalRecord 3.0 设置

如何使用临时对象 CoreData?