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