持久存储协调器核心数据错误:NSSQLiteErrorDomain = 522

Posted

技术标签:

【中文标题】持久存储协调器核心数据错误:NSSQLiteErrorDomain = 522【英文标题】:persistentstorecoordinator coredata error:NSSQLiteErrorDomain = 522 【发布时间】:2019-02-21 12:10:03 【问题描述】:

我正在使用 ios 项目,在该项目中我在注销时删除了数据库,但是当我尝试与另一个用户重新登录时,我收到如下错误:

NSSQLiteErrorDomain = 522

我的注销代码如下:

NSURL *storeURL = [[self contentStorageDirectory] URLByAppendingPathComponent:@"*****.sqlite"];
    [[[NSFileManager alloc] init] removeItemAtURL:storeURL error:nil];
    self.managedObjectContext = nil;
    self.managedObjectModel = nil;
    self.persistentStoreCoordinator = nil;
    [self getManagedObjectContext];

【问题讨论】:

为什么要删除 .sqlite 文件,因为这不是通过删除 .sql 文件来清理所有数据的方法,因为您需要在从应用程序注销时编写删除查询来删除旧用户数据。跨度> 【参考方案1】:

? 注销时删除数据库?也许您试图删除所有以前登录的用户数据。您必须阅读更多有关 CoreData 的信息。您可以 nil 上下文,但不应触及持久存储协调器,因为它引用了正在使用的模型。

当 store 被赋值为 nil 时,你如何获取ManagedObjectContext ?

看看你的模型,你的实体的关系有一个叫做删除规则的东西,可以是拒绝、无效、级联和无操作。

来自苹果:

关系的删除规则指定了如果 尝试删除源对象。

所以您应该尝试在注销后删除所有用户数据。

如果你想调试 CoreData 底层引擎上的每一个动作,把这个 con 你的运行方案放在启动时传递的参数上

-com.apple.CoreData.SQLDebug 1

【讨论】:

以上是关于持久存储协调器核心数据错误:NSSQLiteErrorDomain = 522的主要内容,如果未能解决你的问题,请参考以下文章

核心数据持久存储协调器不存在

重置存储时核心数据崩溃:“无法从此 NSManagedObjectContext 的协调器访问对象的持久存储”

核心数据:无法将持久存储添加到协调器

核心数据错误与异常第 3 部分

使用两个持久存储协调器进行高效后台更新的陷阱

具有全局持久存储的基于核心数据文档的应用程序