我的应用程序在Core Data持久存储中为当前用户存储了大量数据。如果用户注销,我想放弃所有这些数据并重新开始。为什么我无法重置持久存储的内容?
现在,我的代码如下所示:
NSError *error;
[_managedObjectContext lock];
[_managedObjectContext reset];
[_persistentStoreCoordinator removePersistentStore:_persistentStore error:&error];
[[NSFileManager defaultManager] removeItemAtURL:[_persistentStore URL] error:&error];
// error handling here
_persistentStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:[self _storeURL] options:nil error:&error];
[_managedObjectContext unlock];
但无论我做什么,我下次执行读取请求我得到的所有旧数据了。我已经验证过实际的文件正在从文件系统中删除,所以显然这些数据来自某处的内存。我已经尝试了上面的代码,我已经尝试将托管对象上下文重置为零,并从头开始,但是在我终止应用程序并重新运行它之前,没有任何更改会发生。
编辑:其实,甚至没有终止应用程序做任何事情。我看到sqlite文件从NSFileManager
行之后的文件夹中消失,然后在添加新持久性存储的行中重新创建旧文件的确切副本。
编辑:好的,我打开了核心数据调试。只要我打电话removePersistentStore:
,我看到“与sqlite数据库断开连接”。接下来的行addPersistentStoreWithType:
,我看到大量的INSERT
声明,我猜是神奇地从内存中恢复数据库的内容?我可以得到它...不是那样做的吗?
编辑︰好吧,现在我已经通过循环我的管理对象手动删除数据存储的内容。这个工作,不知何故。幸运的是,对于这个项目,用户只有几百个对象,所以这不是非常耗时,但我仍然希望我明白发生了什么......
我假设你没有在上面的代码中出现任何错误?您也可以打开核心数据调试以查看正在执行的SQL。 – 2012-07-31 00:18:15
谢谢,我不知道有一个核心数据调试选项。我编辑了我的问题。 – 2012-07-31 00:28:44