好吧,所以我的应用程序正在移动,我可以创建帐户,并使用新创建的帐户登录。我还有一个root帐户,可以显示所有帐户的列表。在开发这个应用程序的过程中,我在模拟器上创建了25个帐户(不要问)。因此,对我来说,下一个合乎逻辑的步骤是实现删除这些帐户的功能。好吧,我开始关注事情并意识到这将比原计划困难得多。起初我以为我可以执行获取请求并删除用户名,并且将删除与其关联的所有数据。我很快意识到我从未在我的实体中建立属性之间的关系。
所以我知道你的想法,(核心数据库中的所有对象)。我并不反对这样做,但我已经在钥匙串中存储了用户帐户的密码/密码。所以我不确定是否删除了Core Data DB中的所有对象,然后使用用户帐户创建的pin在某个地方的keychain limbo中。我有一种删除/删除帐户钥匙串的方法,但它需要一个用户名才能与之关联(这就是为什么我部分反对对所有东西进行核对)。
所以在我再进一步创建更多帐户或将这个东西放在野外(仍然需要做很多开发)将属性关联在一起的最佳方法是什么,即在它们之间建立关系?目前,我有一个名为帐户的实体,在该实体中我有4个属性: credit , email ,< em> phoneNumber ,用户名。我有一个表单,用户可以在其中创建用户名,输入图钉,电子邮件和电话号码。我希望能够删除所有这些属性只是删除用户名,所以我想有一些排序关系设置。
非常感谢任何想法。
答案 0 :(得分:0)
我认为您不了解Core Data属性和实体的概念。在聊天中与您交谈后,您有一个帐户的实体,您只需要从实体中删除该对象。
您可以通过以下方式执行此操作
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:[[CoreDataHelper sharedInstance] managedObjectContext]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username == %@", usernameString];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entity];
[request setPredicate:predicate];
NSError *error = nil;
Account *account = (Account*) [[[[CoreDataHelper sharedInstance] managedObjectContext] executeFetchRequest:request error:&error] objectAtIndex:0];
[[[CoreDataHelper sharedInstance] managedObjectContext] deleteObject:account];
[[[CoreDataHelper sharedInstance] managedObjectContext] processPendingChanges];
请注意,您的CoreData上下文可能有所不同。
通过执行上述操作,这将删除带有属性( credit,email,phoneNumber,username )的帐户对象。
答案 1 :(得分:0)
好吧,我现在可以删除模拟器上的用户帐户,这要归功于以下代码,当我删除帐户时,它还会删除与帐户关联的属性(奖励)。我猜这些属性是被删除的对象的一部分(不确定)。但这是我正在寻找的功能。
- (IBAction)deleteAccount:(id)sender {
// TODO - implement method / code to delete a user account
// CORE DATA
// setup up the fetch request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// define our table / entity to use
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Account" inManagedObjectContext:_managedObjectContext];
[request setEntity:entity];
// Fetch the records and handle an error
NSError *error;
NSMutableArray *mutableFetchResults = [[_managedObjectContext executeFetchRequest:request error:& error] mutableCopy];
if (!mutableFetchResults) {
// handle error.
// should advise user to restart
}
// compare text field text / string with results in an array
for (Account *anAccount in mutableFetchResults) {
if([anAccount.username isEqualToString:self.tfDeleteAccount.text]) {
NSLog(@"username found.");
// delete keychain for account
[anAccount prepareForDeletion];
// delete account object
[_managedObjectContext deleteObject:anAccount];
// save the managed object context
NSError *error = nil;
if (![_managedObjectContext save:&error])
{
NSLog(@"error %@", error);
}
}
}
}