ios - 核心数据数据库在数据库删除后保留文档

标签 ios core-data

在我的 iOS 项目中,当用户注销时,我使用以下代码删除数据库:

NSPersistentStore *store = [_persistentStoreCoordinator.persistentStores lastObject];
    NSError *error = nil;
    NSURL *storeURL = store.URL;
    [_persistentStoreCoordinator removePersistentStore:store error:&error];

    _persistentStoreCoordinator = nil;
    _managedObjectModel = nil;
    _managedObjectContext = nil;

    [[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

但在此之后,如果我进行登录,即使文件之前已被删除,我仍然拥有与以前相同的文件。 (注意数据库不改名)

在以下链接中,Delete/Reset all entries in Core Data? 一个人添加了以下评论:

Update for iOS5+

With the introduction of external binary storage (allowsExternalBinaryDataStorage or Store in External Record File) in iOS 5 and OS X 10.7, simply deleting files pointed by storeURLs is not enough. You'll leave the external record files behind. Since the naming scheme of these external record files is not public, I don't have a universal solution yet. – an0 May 8 '12 at 23:00

有什么办法可以解决这个问题吗?谢谢

编辑:不认为它是相关的,但为了以防万一,这是该类的属性:

@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;

最佳答案

您很可能要离开现有的 WAL mode journal files在后面。默认情况下,任何名为 Foo.sqlite 的 Core Data 持久存储文件都将包含名为 Foo.sqlite-walFoo.sqlite-shm 的日志文件>。如果您不删除它们,那么当您创建一个新的 Foo.sqlite 时,您的大部分或全部数据将保留。

外部二进制文件也可能是个问题。

最好的方法是将您的核心数据文件放在一个自定义的子目录中。日志文件、外部二进制文件以及 Core Data 将来想到的任何其他内容也将放在该目录中。如果您想删除持久存储,您可以递归地删除该目录中的所有内容,而无需关心文件名是什么。

否则,请自行远程控制 walshm 文件。如果您使用的是外部二进制文件,请找出这些文件所在目录的名称并将其也删除。

关于ios - 核心数据数据库在数据库删除后保留文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27226677/

相关文章:

ios - 继承 UIImageView 并添加 UIControl

ios - 如何在 uiscrollview 中点击后旋转图像?

ios - UIView 和 intrinsicContentSize

ios - 核心数据 : Quickest way to delete all instances of an entity

core-data - 关于与核心数据和关系的并发

iphone - iPhone-在核心数据上获取数据

ios - 垂直滚动时 Collection View 在上方重叠

iphone - 核心数据 : error: NULL _cd_rawData but the object is not being turned into a fault

iphone - 如何创建一个NSManagedObject

ios - 从 Storyboard 转换到子类