持久存储协调器核心数据错误: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的主要内容,如果未能解决你的问题,请参考以下文章