使用关系从核心数据数据库中删除所有表记录

时间:2014-03-12 12:09:59

标签: objective-c core-data ios7

我正在为我的应用程序使用核心数据我有4-5个表,其中一个是userProfile表。我在应用程序中实现了注销。如果用户退出应用程序即可删除用户配置文件,如果使用其他用户帐户登录,则会插入新内容。我想在userprofile delete上删除数据库中的所有记录。我正在使用关系,但即使已删除用户个人资料记录,也不会从数据库中删除其他记录。 我想提一件事是所有数据都来自服务。我在userprofile表和其他表之间创建的关系使用级联删除规则。

2 个答案:

答案 0 :(得分:4)

您有两种不同的方法来实现这一目标。

首先是删除商店并再次创建。这意味着访问文件系统中的存储并删除sql文件。例如,您可以在以下讨论中找到如何实现它:Delete/Reset all entries in Core Data?

第二个解决方案是在UserProfile实体中创建一个级联关系,它将链接其他实体。在后者中,您必须建立反向关系(nullify将是正确的方法)。有关详细信息,请参阅我在Setting up a parent-child relationship in Core Data的回答。

说这个,根据我的经验,我不鼓励在Core Data中保存用户信息(例如密码)。相反,为此采用钥匙串。有些库以简单的方式包装Keychain访问(例如SSKeychain)。

答案 1 :(得分:4)

我尝试使用级联规则使用关系,但对我没用,所以我使用了Delete/Reset all entries in Core Data方法。使用以下代码。

NSError * error; 
NSURL * storeURL = [[AppDelegate.managedObjectContext persistentStoreCoordinator] URLForPersistentStore:[[[AppDelegate.managedObjectContext persistentStoreCoordinator] persistentStores] lastObject]];
[AppDelegate.managedObjectContext lock];
[AppDelegate.managedObjectContext reset];//to drop pending changes 
//delete the store from the current managedObjectContext    
if ([[AppDelegate.managedObjectContext persistentStoreCoordinator] removePersistentStore: [[[AppDelegate.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   
[[[AppDelegate managedObjectContext] persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options: @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} error:&error];  
}    
[AppDelegate.managedObjectContext unlock];   
//that's it !  

这对我有用。