How to clear/reset all CoreData in one-to-many relationship(如何以一对多关系清除/重置所有CoreData)
问题描述
我正在使用 coreData,具有一对多的关系,我有一个文件夹实体和一个文件实体.一个文件夹可以有很多文件等等.
I am using coreData, with one -to-many realtionship, I have a folder entity and a file entity. A folder can have many files and so on.
所以,我有两个 ViewController,FolderViewController 和 FileViewController,它们分别包含文件夹和文件.现在我有一个 modalView,它可以从文件夹和文件 viewcontroller 访问.在这个 VC 中,我有一个按钮来重置所有数据.因此,当我单击此按钮时,我希望所有数据都应重置.
So, I have two ViewControllers, FolderViewController and FileViewController which contains folders and files respectively.Now I have a modalView , which is accesible from both folder and file viewcontroller. In this VC I have a button to Reset all Data. So when I click this I want all the data should reset.
我使用了这段代码,这个函数写在 appdelegate.m 中并从我的 VC 中调用.
I used this code,this function is written in appdelegate.m and called from my 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");
}
所以在我关闭视图时单击 resetButton 后,我收到此错误
So after clicking on resetButton when I close the View, I get this error
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Object's persistent store is not reachable from this NSManagedObjectContext's coordinator'
那么如何解决这个问题.
So how to solve this.
问候兰吉特
推荐答案
这个问题我已经解决了,下面是代码,
I have solved this problem, below is the code,
这个函数已经写在appdelegate.m中
This function has been written in 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 中,我在以这种方式单击的重置按钮上调用它.
And in my SettingsViewController, I am calling this on resetbutton clicked in this way.
- (void)resetButtonclicked
{
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate resetApplicationModel];
}
问候兰吉特.
这篇关于如何以一对多关系清除/重置所有CoreData的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何以一对多关系清除/重置所有CoreData
基础教程推荐
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01