您知道删除Core Data中存储的所有条目的方法吗?我的架构应该保持不变; 我只是想把它重置为空白.
编辑
我希望以编程方式执行此操作,以便用户可以实际按下reset按钮.
我有一个基于导航应用程序模板的项目.在AppDelegate中是方法-applicationDidFinishLoading:和-applicationWillTerminate:.在这些方法中,我正在加载并保存应用程序数据,并将其存储在实例变量中(它实际上是一个对象图).
当应用程序加载时,它会加载MainWindow.xib,它有一个NavigationConroller,后者又有一个RootViewController.RootViewController nibName属性指向RootView(我的实际控制器类).
在我的课堂上,我希望引用我在-applicationDidFinishLoading:方法中创建的对象,以便我可以获得它的引用.
谁能告诉我怎么做?我知道如何在我以编程方式创建的对象之间进行引用,但考虑到中间步骤是在NIB文件中完成的,我似乎无法解决问题.
我对CoreData和使用它的这个应用程序很新.我正在开发一种功能,可以在我在应用程序中注销时清除整个核心数据.
我有2个sqllite文件(出于某种原因,他们认为这很方便)
如何清除所有数据的两个文件并将其重置为无数据状态?
在指南上,我已经尝试了很多方法.
他们似乎都失败了.现在我想知道我做错了什么?也许有人可以解释我如何以正确的方式重置我的2个CoreData文件.
编辑:
//should clear the whole coredata database. mainly used for logout mechanism
-(void)resetCoreData
{
for (NSPersistentStore *store in self.persistentStoreCoordinator.persistentStores)
{
// NSPersistentStore *store = self.persistentStoreCoordinator.persistentStores[0];
NSError *error;
NSURL *storeURL = store.URL;
DLog(@"storeURL: %@", storeURL);
NSPersistentStoreCoordinator *storeCoordinator = self.persistentStoreCoordinator;
[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
DLog(@"There are erreurs: %@", error);
// [self addDefaultData];
}
_persistentStoreCoordinator = nil;
_managedObjectContext = nil;
_managedObjectModel = nil;
}
Run Code Online (Sandbox Code Playgroud)
这似乎并没有为我清除CoreData.
EDIT2:
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext …Run Code Online (Sandbox Code Playgroud) 我在SO内搜索但是在处理关系时我没有找到任何提高删除核心数据中托管对象的性能的建议.
场景非常简单.
如您所见,有三种不同的实体.每个实体与下一个实体级联.例如,FirstLevel有一个叫做关系secondLevels到SecondLevel.从删除规则FirstLevel来SecondLevel为级联而从删除规则SecondLevel来FirstLevel是废掉.在SecondLevel和之间应用相同的规则ThirdLevel.
当我想删除整个图形时,我执行如下方法:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"FirstLevel" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSError *error = nil;
NSArray *items = [context executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
// delete roots object and let Core Data to do the rest...
for (NSManagedObject *managedObject in items) {
[context deleteObject:managedObject];
}
Run Code Online (Sandbox Code Playgroud)
利用Cascade规则删除图表.这适用于少数对象,但会降低许多对象的性能.另外,我认为(但我不太确定)这种类型的删除会执行大量的磁盘往返,我错了吗?
所以,我的问题如下:如何在不利用Cascade规则和提升性能的情况下删除图形,同时保持图形一致性?
先感谢您. …
performance core-data cascading-deletes object-relationships ios