1

我想确认我删除核心数据存储(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;
}
4

1 回答 1

0

这不是一个好方法。

至少,iOS 7 及更高版本上的 SQLite 在与其主文件相同的目录中创建日志文件。如果您将这些留在后面,您可能会将旧数据保留在新文件中,或损坏数据。因此,您至少还需要删除Store.sqlite-shmand Store.sqlite-wal

如果您的 Core Data 模型使用二进制属性并为这些属性中的任何一个启用了“允许外部存储”,那么这些属性的值可能会存储在外部文件中。显然您的代码不会删除这些文件,但这些文件的位置没有记录。

如果您希望删除 Core Data 持久存储文件,您应该将文件放入它们自己的自定义子目录中,而不是直接放入文档目录中。然后,您可以递归地删除该目录中的所有内容,而无需关心 Core Data 是否在持久存储文件之外创建额外文件。

于 2015-01-29T17:28:04.340 回答