gpt4 book ai didi

iphone - 当模型改变时删除存储在 CoreData 中的所有数据

转载 作者:太空狗 更新时间:2023-10-30 03:28:34 27 4
gpt4 key购买 nike

我有一个应用程序可以从互联网获取数据并使用 CoreData 将它们存储在设备中,以获得更流畅的体验。

因为我使用 Core Data,所以每当我的架构发生变化时,当我尝试使用设备上存储的先前数据运行应用程序时,应用程序就会崩溃。检测此更改并从设备中删除所有数据的最快方法是什么,因为我不介意重新下载它们。它胜过崩溃并将模式重新映射到新模式(在我的例子中)。

我看到这个检查是在 getter 中执行的:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator

所以我只需要知道删除整个数据库并重新设置核心数据的方法。谢谢:)

最佳答案

回到这个问题,为了从我的 CoreData 存储中删除所有数据,我决定简单地删除 sqlite 数据库文件。所以我只是像这样实现了 NSPersistentStoreCoordinator:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}

NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"myAppName.sqlite"]];

NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {

NSLog(@"Error opening the database. Deleting the file and trying again.");

//delete the sqlite file and try again
[[NSFileManager defaultManager] removeItemAtPath:storeUrl.path error:nil];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

//if the app did not quit, show the alert to inform the users that the data have been deleted
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Error encountered while reading the database. Please allow all the data to download again." message:@"" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] autorelease];
[alert show];
}

return persistentStoreCoordinator;
}

关于iphone - 当模型改变时删除存储在 CoreData 中的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1778430/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com