我想确认我删除Core Data存储(sqlite)的方法是正确的。它似乎工作没有崩溃,但想确认这是正确的方法。之后,当用户连接到数据库时,会自动生成一个新的sqlite文件。
以下是删除数据存储的代码:
- (BOOL)dropDataStore{
// ----------------------
// This method removes all traces of the Core Data store
// ----------------------
NSError *_error = nil;
NSURL *_storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Store.sqlite"];
NSPersistentStore *_store = [persistentStoreCoordinator persistentStoreForURL:_storeURL];
// Remove the SQL store and the file associated with it
if ([persistentStoreCoordinator removePersistentStore:_store error:&_error]) {
[[NSFileManager defaultManager] removeItemAtPath:_storeURL.path error:&_error];
}
if (_error) {
return NO;
}
persistentStoreCoordinator = nil;
managedObjectContext = nil;
managedObjectModel = nil;
return YES;
}
答案 0 :(得分:0)
这不是一个好方法。
iOS 7及更高版本上的SQLite至少会在与其主文件相同的目录中创建日志文件。如果将这些遗留下来,可能会将旧数据保留在新文件中,或者损坏数据。所以至少您还需要删除Store.sqlite-shm
和Store.sqlite-wal
。
如果您的Core Data模型使用二进制属性并且为这些属性中的任何属性启用了“允许外部存储”,则这些属性的值可以存储在外部文件中。显然你的代码不会删除它们,但是没有记录这些文件的位置。
如果您希望删除Core Data持久性存储文件,则应该将这些文件放入自己的自定义子目录中,而不是直接放在文档目录中。然后,您可以递归地删除该目录中的所有内容,而不关心Core Data是否在持久性存储文件之外创建额外的文件。