gpt4 book ai didi

ios - 神奇的记录 - 即使删除数据库文件也会出现重复记录

转载 作者:行者123 更新时间:2023-11-29 10:40:18 25 4
gpt4 key购买 nike

在我的 ios 应用程序中,我正在使用 Magical Record 和 NSFetchedResultsController。我正在尝试实现以下功能:

  1. 用户导航到设置屏幕
  2. 他选择 - “删除帐户”
  3. 他的所有数据都被删除了
  4. 他被导航到重新注册屏幕

为了删除他的所有数据,我写了下面的代码:

- (void)cleanAndResetupDB
{
[MagicalRecord cleanUp];

BOOL isSuccess = YES;
for (NSString *dbStore in [self dbBackups]) {
NSError *error = nil;

NSURL *storeURL = [NSPersistentStore MR_urlForStoreName:dbStore];

if(![[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error]){
NSLog(@"An error has occurred while deleting %@", dbStore);
NSLog(@"Error description: %@", error.description);
isSuccess = NO;
}
}

if (isSuccess) {
[MagicalRecord setupCoreDataStackWithStoreNamed:CRP_DB];
}
}

- (NSArray *)dbBackups
{
NSString *shmFileName = [NSString stringWithFormat:@"%@-shm",CRP_DB];
NSString *walFileName = [NSString stringWithFormat:@"%@-wal",CRP_DB];
return @[CRP_DB,shmFileName,walFileName];
}

当注册完成后,用户被导航到联系人屏幕,我们从服务器检索相关联系人并将其存储在本地数据库中。由于 FRC 用于从本地数据库检索数据并将其显示在 TableView 中,因此一旦数据保存在数据库中,它就会自动出现在 TableView 中。

问题是——如果我在删除本地数据库后退出应用程序,重新启动时它会显示正确的记录,但如果我在删除本地数据库后不退出应用程序,则会显示重复记录。

有什么线索吗?

最佳答案

如果你正在使用 Core Data 并且你想删除你的数据库,你必须实际删除你的持久存储。仅仅删除数据库文件是不够的。 Core Data 在内存中缓存对象,如果它不知道应该删除它们,可以将它们重新提交给数据库。特别是,您错过了对 removePersistentStore:error: 的调用。

NSPersistentStoreCoordinator *storeCoordinator = ...; // you should already have a persistent store coordinator
NSURL *storeURL = [NSPersistentStore MR_urlForStoreName:dbStore];
[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

关于ios - 神奇的记录 - 即使删除数据库文件也会出现重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848934/

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