gpt4 book ai didi

ios - 如何清除/重置一对多关系中的所有CoreData

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:08:49 24 4
gpt4 key购买 nike

我正在使用具有一对多关系的 coreData,我有一个文件夹实体和一个文件实体。一个文件夹可以有很多文件等等。

所以,我有两个 ViewController,分别包含文件夹和文件的 FolderViewController 和 FileViewController。现在我有一个 modalView ,它可以从文件夹和文件 View Controller 访问。在这个 VC 中,我有一个重置所有数据的按钮。所以当我点击它时,我希望所有数据都应该重置。

我使用了这段代码,这个函数是在appdelegate.m中编写的,并从我的VC中调用。

- (void)resetToDefault
{
NSError * error;
// retrieve the store URL
NSURL * storeURL = [[__managedObjectContext persistentStoreCoordinator] URLForPersistentStore:[[[__managedObjectContext persistentStoreCoordinator] persistentStores] lastObject]];
// lock the current context
[__managedObjectContext lock];
[__managedObjectContext reset];//to drop pending changes
//delete the store from the current managedObjectContext
if ([[__managedObjectContext persistentStoreCoordinator] removePersistentStore:[[[__managedObjectContext persistentStoreCoordinator] persistentStores] lastObject] error:&error])
{
// remove the file containing the data
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
//recreate the store like in the appDelegate method
[[__managedObjectContext persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error];//recreates the persistent store
}
[__managedObjectContext unlock];
//that's it !

NSLog(@"buttonReset Pressed");
}

所以当我关闭 View 时点击重置按钮后,我得到这个错误

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Object's persistent store is not reachable from this NSManagedObjectContext's coordinator'

那么如何解决呢。

问候兰 git

最佳答案

我已经解决了这个问题,下面是代码,

这个函数已经写在appdelegate.m中了

- (void) resetApplicationModel
{
NSError *error;
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"AppName.sqlite"];
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil];
for (NSManagedObject *ct in [self.managedObjectContext registeredObjects]) {
[self.managedObjectContext deleteObject:ct];
}

//Make new persistent store for future saves
if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
// do something with the error
}
}

在我的 SettingsViewController 中,我在以这种方式单击的重置按钮上调用它。

- (void)resetButtonclicked
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate resetApplicationModel];
}

问候兰 git 。

关于ios - 如何清除/重置一对多关系中的所有CoreData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14646595/

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